如何创建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
相关产品推荐
相关产品推荐

