MariaDB中执行含IF语句的触发器报1064语法错误求助
问题原因及解决方案
核心原因
你遇到的1064语法报错是SQL语句分隔符冲突导致的:
- MariaDB默认的SQL语句结束标记是分号
;,你的触发器代码内部END IF、SET语句末尾都用了分号作为结束符 - phpMyAdmin执行SQL时会默认按分号拆分语句,解析到触发器内部第一个分号就认为整段
CREATE TRIGGER语句已经结束,剩余的代码无法识别,就会抛出语法错误。在线测试平台通常会自动处理存储程序/触发器的分隔符问题,所以相同代码可以正常运行。
解决步骤
在phpMyAdmin的SQL窗口执行代码前,先手动临时修改语句分隔符,等触发器创建完成后再改回默认分号即可:
-- 临时把语句分隔符改成//,避免和触发器内部的分号冲突 DELIMITER // CREATE TRIGGER Update_trigger BEFORE INSERT ON product_price FOR EACH ROW BEGIN IF (NEW.product_id = 'P9999') THEN SET NEW.product_id = 'name99', NEW.value_price = 999; END IF; IF (NEW.product_id = 'P7777') THEN SET NEW.product_name = 'name77', NEW.value_price = 777; END IF; END // -- 用自定义的分隔符标记整段触发器语句结束 -- 改回默认的分号分隔符 DELIMITER ;
你也可以不修改代码,直接在phpMyAdmin的SQL执行页面下方找到「分隔符」输入框,把默认的;改成//,再直接执行你原来的触发器代码,执行完成后再把分隔符改回默认值即可,效果和上述修改代码的方式完全一致。
内容的提问来源于stack exchange,提问作者Poom Chawalit
相关产品推荐
相关产品推荐

