我正在创建一个 mysql 触发器(对触发器来说是全新的)并且我收到一个错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 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
,插入
)$contacts_id
RDBMS 完全不知道
当对表 contacts
执行 UPDATE
时,您似乎试图自动更新字段 full_name
的值。
为此,您需要使用 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;;
关于创建更新触发器时出现 MySQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495911/