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

标签 mysql sql database triggers eventtrigger

我有一张这样的 table

 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. 

谢谢你。

最佳答案

使用更新前触发器:

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

请注意:您使用 update 会给您带来令人惊讶的结果。 update 没有 where 子句,因此它将在表中的所有行中设置 fullname 列。

关于MySQL:触发器 - 更改不同列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34179520/

相关文章:

sql - 在 WHERE 子句中使用 SELECT 语句

.net - 选择哪个数据库以及如何压缩它

mysql - 从 3 个不同的表中选择项目

php - Laravel 5.4 中的数据未从 Controller 存储到数据库中

php - 使用 PHP 和 MySQL 验证之间的日期

sql - 正确的查询设计?交叉连接驱动临时报告界面

sql - SELECT 列表中子查询内的不同 LISTAGG

php - Flash 被 ISP 阻止

java - 将 Swing 中的 JTextArea 存储在 Access 2007 数据库中

java - hibernate有哪些要点?