MySQL触发器问题:插入tache表后按条件更新employe表薪资
问题解决:MySQL触发器无法正常运行的修复方案
原代码中的错误点
- 触发器关联表错误:目标监听表是
tache,但代码中写为on réalise - 字段名不匹配:
tache表字段为datestart、dateend,代码中误用了带重音的dateDébut、datefin,需与表定义完全一致 - UPDATE语法错误:MySQL的UPDATE语句不需要
TABLE关键字,多余关键字会触发语法报错 - 薪资计算逻辑错误:需求是
salaire = salaire*0.5(薪资减半),但代码写为salaire+(salaire*0.5)(薪资增加50%),逻辑完全相反 - 表名拼写错误:员工表实际为
employe,代码中误用带重音的employé,需与实际表名一致
修复后的正确代码
drop trigger if exists set_5_slr; delimiter $$ create trigger set_5_slr before insert on tache -- 修正为目标表tache FOR EACH ROW BEGIN -- 修正字段名,注意datediff参数顺序:datediff(结束日期, 开始日期)才是任务持续天数 if datediff(new.dateend, new.datestart) > 30 then -- 移除多余TABLE关键字,修正薪资计算逻辑与表名 UPDATE employe set salaire = salaire * 0.5 where mle = new.mle; end if; end ; delimiter ;
额外注意事项
- 确认
datediff参数顺序:MySQL中datediff(a, b)返回a - b的天数差,若需判断任务持续时间超过30天,必须用datediff(new.dateend, new.datestart),原代码参数顺序会导致判断逻辑颠倒 - 确保
employe表的mle字段与tache表的mle字段数据匹配,否则UPDATE语句无法找到对应记录
内容的提问来源于stack exchange,提问作者NOURDDINE BENYAHYA
相关产品推荐
相关产品推荐

