创建更新触发器时出现MySQL错误

时间:2019-02-02 18:03:35

标签: mysql sql

im创建一个mysql触发器(对触发器来说是全新的),并且出现错误:

  

#1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第5行的''附近使用

代码是:

CREATE TRIGGER contact_name
AFTER UPDATE ON contacts
FOR EACH ROW
BEGIN
    SET full_name = CONCAT(NEW.fname,' ',NEW.lname) 
        WHERE contacts_id = $contacts_id;
END;

我完全不知道为什么它不允许我设置触发器。

1 个答案:

答案 0 :(得分:0)

  

SET FULL_NAME = CONCAT(NEW.fname,””,NEW.lname)WHERE contacts_id = $ contacts_id;

这是无效的语法:

  • SET不采取WHERE条款(SQL查询做,例如SELECTUPDATEINSERT

    < / LI> RDBMS完全不知道
  • $contacts_id

您似乎试图在再次执行full_nameUPDATE时自动更新字段contacts的值。

为此,您需要使用BEFORE UPDATE触发器(而不是AFTER UPDATE)来设置值NEW.full_name。通常,在设置值之前,请确保未在更新查询中提供该值也是一种好习惯:

CREATE TRIGGER foo BEFORE UPDATE ON contacts 
FOR EACH ROW
    IF NEW.full_name IS NULL THEN
        SET NEW.full_name := CONCAT(
            COALESCE(NEW.fname, OLD.fname),
            ' ',
            COALESCE(NEW.lname, OLD.fname)
        );
    END IF;;