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

SQL Trigger实现折扣联动更新商品价格报1064语法错误求助

MariaDB触发器1064报错修复方案

报错原因

你遇到的1064语法错误由三类问题导致:

  • 代码中的IF条件判断没有加END IF做闭合
  • 触发器最外层的BEGIN...END块没有闭合
  • 若你是在命令行或默认启用语句分隔符的客户端执行,还会因为触发器内部的;被提前识别为语句结束符,导致代码被截断解析

修复后完整代码

执行时先临时修改语句分隔符,避免内部的;干扰解析:

-- 临时修改分隔符为//
DELIMITER //
CREATE TRIGGER DiscountUpdate BEFORE UPDATE ON game
FOR EACH ROW BEGIN
    IF NEW.Discount <> OLD.Discount THEN
        SET NEW.NetPrice = NEW.BaseGamePrice - (NEW.BaseGamePrice * (NEW.Discount / 100));
    END IF;
END //
-- 改回默认分隔符;
DELIMITER ;

注:原代码中IF块内部多余的嵌套BEGIN...END已经移除,不影响逻辑的前提下简化了代码结构,你如果需要保留嵌套结构,只要补上对应的END IF和外层END即可正常运行。

逻辑验证

修复后的触发器完全匹配你的需求:

  • 仅在折扣字段发生变更时才触发计算,避免无意义的性能消耗
  • 计算逻辑正确:原价100、折扣25%时净价为75,折扣调为0%时净价为100,调为50%时净价为50,符合预期。

内容的提问来源于stack exchange,提问作者nafets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:00