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

如何创建MySQL触发器使Courses表Price字段自动降价10%?

解决Courses表价格自动打9折的触发器问题

你的代码主要有几个问题:

  • 表达式语法错误:New 0.10 * Price 完全不符合MySQL语法,降价10%等价于保留原价的90%,正确写法是 New.Price * 0.9 或者 New.Price - New.Price * 0.1
  • 逻辑错误:SET Price = (Price - Price) 会把价格直接设为0,完全偏离需求
  • 触发器时机混淆:你提到“录入后”,如果是新增课程数据时应用折扣,应该用BEFORE INSERT;如果是更新已有课程价格时也要自动折扣,才用BEFORE UPDATE,可以根据实际需求选择

新增数据时自动打9折的触发器

DELIMITER #
CREATE TRIGGER course_discount_on_insert
BEFORE INSERT ON Courses 
FOR EACH ROW
SET New.Price = New.Price * 0.9;
END #
DELIMITER ;

更新数据时自动打9折的触发器(可选)

DELIMITER #
CREATE TRIGGER course_discount_on_update
BEFORE UPDATE ON Courses 
FOR EACH ROW
SET New.Price = New.Price * 0.9;
END #
DELIMITER ;

核心说明

  • 用BEFORE INSERT/UPDATE是因为要在数据写入表之前修改New.Price的值,这样最终存储的就是折扣后的价格
  • 不需要额外声明空变量,New.Price直接代表即将插入/更新的原始价格,直接基于它计算即可
  • 触发器命名尽量明确,区分插入和更新场景,方便后续维护和排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:46:10