1

我以前从未写过触发器,我正在关注教程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... 查询,但我不明白我如何引用“库存”表的正确行上的字段。UPDATE 或 DELETE 的答案是否相同?

编辑:我已尝试遵循以下答案的建议,但没有奏效我收到此错误

1363 - INSERT 触发器中没有 OLD 行。怎么了?

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 ;
4

2 回答 2

2

它们被称为 NEW 和 OLD。

NEW 是要插入的新记录或更新的数据。

OLD 是删除的记录,或更新前的旧数据。

于 2013-08-12T18:50:45.927 回答
2

在 INSERT 触发器中,只能NEW.col_name使用;没有旧行。在 DELETE 触发器中,只能OLD.col_name使用;没有新行。在 UPDATE 触发器中,您可以使用OLD.col_name在更新之前引用行的列,并在更新NEW.col_name后引用行的列。

于 2015-07-21T12:06:35.673 回答