我之前从未写过触发器,我正在关注教程http://net.tutsplus.com/tutorials/databases/introduction-to-mysql-triggers/,但我对此感到困惑。
我正在尝试编写一个触发器,它从表中插入数据,然后将其记录在历史表中。到目前为止,这是我的代码:
DELIMITER $$
CREATE TRIGGER trackHistory
AFTER INSERT ON test.inventory
FOR EACH ROW BEGIN
***
END;
DELIMITER ;
我需要添加一个INSERT INTO history ...查询,但我不明白我如何引用'inventory'表的正确行上的字段。答案是否与UPDATE或DELETE相同?
编辑: 我试图按照下面的答案的建议,但它没有工作我得到这个错误
DELIMITER $$
CREATE TRIGGER trackInsertHistory
AFTER INSERT ON inventory
FOR EACH ROW BEGIN
INSERT INTO history
VALUES (NEW.ID, OLD.Quantity, NEW.Quantity, TIMESTAMP);
END$$
CREATE TRIGGER trackStockHistory
AFTER UPDATE ON inventory
FOR EACH ROW BEGIN
INSERT INTO history
VALUES (NEW.ID, OLD.Quantity, NEW.Quantity, TIMESTAMP);
END$$
DELIMITER ;
答案 0 :(得分:2)
在INSERT触发器中,只能使用NEW.col_name
;没有旧排。在DELETE触发器中,只能使用OLD.col_name
;没有新的行。在UPDATE触发器中,您可以使用OLD.col_name
在更新行之前引用行的列,并使用NEW.col_name
在行更新后引用行的列。
答案 1 :(得分:1)
它们被引用为NEW和OLD。
NEW是要插入的新记录或更新的数据。
OLD是已删除的记录,或更新前的旧数据。