我有两张table:
员工,包括id、姓名、职务
员工审核包括列id、员工id、姓名、职务、更新日期、操作
我有一个扳机现在还可以用…:
CREATE TRIGGER after_update_employees
AFTER UPDATE ON employees FOR EACH ROW
BEGIN
IF OLD.name <> new.name THEN
INSERT INTO employees_audit(employee_id, name,change_date,action)
VALUES(OLD.id, concat('Old:', OLD.first_name, 'New:', new.first_name,'"'),NOW(),"update");
END IF;
IF OLD.job_title <> new.job_title THEN
INSERT INTO employees_audit(employee_id, job_title, change_date,action)
VALUES(OLD.id, concat('Old:', OLD.job_title, 'New:', new.job_title,'"'),NOW(),"update");
END IF;
END$$
.. 但是,如果我在employees表中为同一id更新了2个条件,我的触发器将创建2个单独的行(每个条件一行),但我更希望触发器只在一行上声明同一id的所有更新。
例如:
UPDATE employees
SET job_title = "programmer", first_name = "Vic"
WHERE employee_number =1;
触发器1的结果
有没有可能把我的触发器重写成一个循环?
1条答案
按热度按时间2admgd591#
考虑使用
case
表达式:请注意,我修改了插入其值的列
name
(你正在查看name
但是插入fist_name
,这没有多大意义)。另外,我用单引号替换了双引号(对字符串使用双引号不是一个好的做法,尽管mysql支持它,因为它偏离了sql标准)。如果列可为空,则需要附加逻辑: