【发布时间】:2016-03-21 08:21:27
【问题描述】:
在“MySQL 管理员的圣经”一书中,作者讨论了有关触发器中事件、时间和关键字 NEW 和 OLD 组合的一些限制。他们说的是:
-BEFORE INSERT:BEFORE INSERT 支持 NEW。 BEFORE 不支持 OLD。
-AFTER INSERT:AFTER 不支持 NEW。将 OLD 与 AFTER INSERT 一起使用是没有意义的。
-更新前:更新前支持新。 BEFORE 不支持 OLD。
-AFTER UPDATE:AFTER 不支持 NEW。 AFTER UPDATE 支持 OLD。
-BEFORE DELETE:将 NEW 与 BEFORE DELETE 一起使用是没有意义的。 BEFORE 不支持 OLD。
-AFTER DELETE:AFTER 不支持 NEW。 OLD 支持 AFTER DELETE。
也就是说,根据本书,例如,当我使用 AFTER 时,我不能使用 NEW。但是,在下面的触发器中,这正是我正在做的。如果插入了一些新员工,我会将这个员工存储在一个名为employee_history 的备份表中。
CREATE TRIGGER insert_emplyee_history
AFTER INSERT ON EMPLOYEE
FOR EACH ROW
INSERT INTO EMPLOYEE_HISTORY VALUES (NEW.NOME,NEW.SSN,NEW.SALARIO,NEW.DNO);
此触发器在 MySQL 5.7 中按预期工作。
这本书有错吗? 也许这些约束在上一个版本(5.7)中已经改变了。
我想知道关于事件、时间和 OLD 和 NEW 组合的限制是什么。
【问题讨论】:
-
考虑到很多使用的装配器是没有意义的。我认为插入后部分是一个错字,因为他们谈论它如何不支持旧的。只有拥有新值才有意义,因为您输入的值是新值,并且不会有旧值,因为记录是新的。更新触发器应该同时具有旧的和新的,因为有时您想要记录两组值以用于审计目的。删除只能有旧值,因为它是被删除的现有记录,所以除了空值/之外没有新信息
-
谢谢你们的cmets。
标签: mysql database stored-procedures triggers