You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:03