如何创建带条件的有效SQL触发器?
触发器语法错误修复方案
你的代码存在以下4个问题,对应修复方案如下:
- 遗漏了MySQL IF语句必填的
THEN关键字,标准语法为IF 条件 THEN 执行逻辑 END IF; - SET语句末尾遗漏了语句结束符分号
- 字段名拼写错误:需求是更新
publishingDate,但代码中误写为多了一个d的PublishingdDate - 缺少状态变更判断:原有逻辑会在每次更新行且
Published为true时都覆盖日期,而非仅在Published从false变为true时触发更新,不符合业务需求
修正后可用代码
delimiter ! CREATE TRIGGER `vc`.`Articles_Updated_trigger` BEFORE UPDATE ON `Articles` FOR EACH ROW BEGIN -- 仅当Published从未发布变为发布状态时才更新发布日期,避免后续修改其他字段时覆盖发布时间 IF OLD.Published = FALSE AND NEW.Published = TRUE THEN SET NEW.publishingDate = CURRENT_TIMESTAMP; END IF; END ! delimiter ;
注意事项
- 注意和你表中的实际字段名保持大小写一致,如果你表中
publishingDate是其他拼写形式需要对应调整 - 触发器创建完成后务必执行
delimiter ;恢复默认语句分隔符,避免后续执行其他SQL语句报错
内容的提问来源于stack exchange,提问作者Paul Zaslavskij
相关产品推荐
相关产品推荐

