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
相关产品推荐
相关产品推荐

