MySQL:触发器 - 更改不同列的值

时间:2015-12-09 13:02:57

标签: mysql sql database triggers eventtrigger

我有一张这样的桌子

 id     firstname   lastname    fullname
 1      alex        car         alex car
 2      tony        table       tony table

如果更改名字或姓氏,我希望数据库也自动更改全名。

我用这个触发器尝试了它

CREATE TRIGGER mytrigger
AFTER UPDATE
   ON mytable FOR EACH ROW

BEGIN

    UPDATE `mydb`.`mytable` SET `fullname` = CONCAT(NEW.firstname, " ",NEW.lastname)    

END;

但是我收到了这个错误:

#1442 - Can't update table 'mytable' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 

谢谢你。

1 个答案:

答案 0 :(得分:1)

使用更新前触发器:

CREATE TRIGGER mytrigger BEFORE UPDATE
   ON mytable FOR EACH ROW
BEGIN
    set new.fullname = CONCAT(NEW.firstname, ' ' , NEW.lastname) ;
END;

作为备注:您使用update会给您带来惊人的结果。 update没有where子句,因此它会在表格的所有行中设置fullname列。