我有下面的触发器在emplog表中插入新值,我想让我的触发器在描述列中插入发生的事件,例如,如果我更改了last_name,我希望它显示为old.lastname更改为new.last_name,如果它的名字或性别或dob或婚姻或ssn更新它应该做同样的,我是一个新手我怎么能实现这个让我说我想使用concat函数??
CREATE TRIGGER emplog_update AFTER UPDATE ON emp
FOR EACH ROW
INSERT INTO emplog VALUES
(NEW.id,NEW.lastname,NEW.firstname,NEW.gender,NEW.dob,NEW.marital,NEW.SSN,'U',NULL,USER(),('this is where the description will go'));
答案 0 :(得分:0)
您可以使用select
代替values
来生成列列表。
您可以使用concat_ws()
将字符串连接在一起,方法是使用case语句来比较值。以下版本假定列没有NULL值:
CREATE TRIGGER emplog_update AFTER UPDATE ON emp
FOR EACH ROW
INSERT INTO emplog (id, lastnmae, firstname, . . .)
select NEW.id,NEW.lastname,NEW.firstname,NEW.gender,NEW.dob,NEW.marital,NEW.SSN,'U',NULL,USER(),
concat_ws(',',
(case when new.id <> old.id then 'id' end),
(case when new.lastname <> old.lastname then 'lastname' end),
(case when new.firstname <> old.firstname then 'firstname' end),
. . .
);
作为备注,您应该在insert
标准中列出该表的列。这是保持代码可维护性的良好实践,对于触发器尤为重要。如果有人删除或重命名列,则触发器可能会在下次更新时失败,并带有难以理解的电子邮件消息。
将...
替换为所有列的类似代码。