【问题标题】:MySQL: Trigger - Change value for different columnsMySQL:触发器 - 更改不同列的值
【发布时间】:2015-12-09 13:02:56
【问题描述】:

我有一张这样的桌子

 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. 

谢谢。

【问题讨论】:

    标签: mysql sql database triggers eventtrigger


    【解决方案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 列。

    【讨论】:

    • 我用 BEFORE 触发器尝试过,但没有成功。
    猜你喜欢
    • 2020-08-16
    • 2013-01-24
    • 2021-09-08
    • 2021-10-05
    • 2016-04-30
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多