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;
我完全失去了为什么它不是让我安装了扳机。
SET FULL_NAME = CONCAT(NEW.fname,””,NEW.lname)WHERE contacts_id = $ contacts_id;
这不是有效的语法:
SET
不采取WHERE
条款(SQL查询做,像SELECT
,UPDATE
,INSERT
)$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;;