创建一个更新触发器MySQL错误

问题描述 投票:2回答:1

IM创建MySQL触发器(完全陌生的触发器)和IM得到一个错误:

#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;

我完全失去了为什么它不是让我安装了扳机。

mysql sql
1个回答
0
投票

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

这不是有效的语法:

  • SET不采取WHERE条款(SQL查询做,像SELECTUPDATEINSERT
  • $contacts_id完全是未知的RDBMS

你似乎试图当full_name被反对票表UPDATE执行自动更新现场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;;
© www.soinside.com 2019 - 2024. All rights reserved.