mysql - 更新触发器.. 没有按预期工作?

标签 mysql triggers

我正在学习如何在 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;

最佳答案

你有一个逻辑错误。如果工资部门发生变化,第一个 IF block 从新部门中减去旧工资。

但是您不需要测试任何东西。简单地编写这两个更新语句:

UPDATE department SET
total_sal = total_sal - old.salary
WHERE department.dno = old.dno;

UPDATE department SET
total_sal = total_sal + new.salary
WHERE department.dno = new.dno;

这个逻辑是稳健的,不会失败。

关于mysql - 更新触发器.. 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164535/

相关文章:

php - MySQL 使用多个 WHERE 子句选择 AVG

mysql - 在 SQL 中合并

SQL 触发器 - 如何获取更新的值?

mysql - Hibernate 不回滚触发器相关的更改

mysql - 需要有关主键选择的建议

MySQL Workbench 数据导入插入错误值

mysql - 我需要一个触发器来在我的 sql 数据库中使用字符串和一些零创建 id

MYSQL select 成多行

mysql - 使用 CASE 根据其他列值更新列值

xaml - Windows 手机 : no trigger in xaml?