如何知道MySQL触发器中哪些字段已更改?

时间:2015-12-15 19:38:10

标签: mysql database stored-procedures triggers

我有两张桌子:EMPLOYEE和DEPARTMENT。他们有以下描述。

EMPLOYEE: NAME, SSN, SALARY, DNO
DEPARTMENT: NAME, DNO, TOTAL_SAL

SSN是EMPLOYEE的主要密钥,DNO是DEPARTMENT的主要密钥。 EMPLYEE.DNO是引用DEPARTMENT.DNO的外键。 EDEPARTMENT.TOTAL_SAL是一个派生字段,用于存储给定部门员工的工资总和。

我想开发触发器来保持TOTAL_SAL最新。

例如,我有以下触发器,可以在插入新的amployee时使TOTAL_SAL保持最新状态。

DELIMITER |
CREATE TRIGGER total_sal_trg
BEFORE INSERT ON EMPLOYEE
FOR EACH ROW
BEGIN
  UPDATE DEPARTMENT
  SET TOTAL_SAL=TOTAL_SAL+NEW.SALARY
  WHERE DEPARTMENT.DNO=NEW.DNO;
END|
DELIMITER ;

但是,TOTAL_SAL也可以在其他3个事件中更改:

1-When the salary of some employee is changed.
2-When the department of some employee is changed.
3-When some employee is removed.

对于覆盖1和2,我试图开发一个触发器,当在表EMPLOYEE上发生UPDATE事件时触发。也就是说,我试图为这两种情况开发一个触发器。但是,为此,我需要知道员工的哪个领域已经改变。如果部门改变了,我需要做点什么。如果工资发生了变化,就必须做其他事情。

有没有办法知道在触发触发器的UPDATE事件中是否更改了字段?

是否有其他方法可以实现覆盖事件1和2的触发器?

我正在使用MySQL 5.7。

提前谢谢你。 最好的问候。

0 个答案:

没有答案