【发布时间】:2014-04-19 00:54:04
【问题描述】:
我正在学习如何在 MYSQL 中构建触发器,我已经构建了一个触发器,如果部门员工之一被更新(他们的工资被更新或者他们被添加到部门/从部门中删除),它将重新计算部门工资。如果我更新用户的工资,它也不会更新部门工资。
员工表:
SSN
Salary
Name
Dno
Supervisor_ssn
部门表:
DName
Dno
Total_sal
Manager_SSN
触发器如下:
DELIMITER $$
CREATE TRIGGER `Employee_AUPD` AFTER UPDATE ON `Employee` FOR EACH ROW
BEGIN
IF old.salary != new.salary THEN
UPDATE department SET total_sal = total_sal - old.salary
WHERE new.dno = department.dno;
UPDATE department SET total_sal = total_sal + new.salary
WHERE new.dno = department.dno;
END IF;
IF old.dno != new.dno THEN
UPDATE department SET total_sal = total_sal - old.salary
WHERE old.dno = department.dno;
UPDATE department SET total_sal = total_sal + new.salary
WHERE new.dno = department.dno;
END IF;
END;
DELIMITER;
【问题讨论】:
-
在这里为我工作:sqlfiddle.com/#!2/1426e/3
-
我正在更新的记录中 Salary 和 Dno 的值为 NULL,我想知道这是否与它有关。就像你说的,它非常适合没有 NULL 值的记录。
-
阅读:stackoverflow.com/questions/6999295/…(您应该在问题中包含空值)。