mysql触发器There is no NEW row in on DELETE trigger

mysql触发器There is no NEW row in on DELETE triggercreate TRIGGER payslip insert after insert on payslip for each ROW begin update VIP card set VIP card Remaining Remaining new expenditure where VIP card IDnumber

大家好,我是讯享网,很高兴认识大家。
create TRIGGER payslip_insert after insert on payslip for each ROW begin update VIP_card set VIP_card.Remaining = Remaining - new.expenditure where VIP_card.IDnumber = new.IDnumber; end 

讯享网

这是一个触发器的模板
其中payslip_insert是取的触发器的名字,after/before代表触发的时机,insert/delete/update是触发的时机
这里的语句的意思是:每当对payslip这个table做insert操作的时候,更新VIP_card的Remaining值为Remaining - new.expenditure,new就是你对payslip的那一行插入操作where语句就是对应操作一致的IDnumber,不能胡乱扣别人卡里的金额
在写delete语句的时候,我一开始是这样写的

讯享网//错误写法!!! create TRIGGER payslip_delete after delete on payslip for each ROW begin update VIP_card set VIP_card.Remaining = Remaining + new.expenditure where VIP_card.IDnumber = new.IDnumber; end 

创建TRIGGER的时候倒是没有报错,在之后delete语句的时候就会出现如下报错:

There is no NEW row in on DELETE trigger 

这是说在Delete操作里面没有新的一行


讯享网

在delete操作里,是需要删掉一行的,这时候要操作的话是对old,就是即将删除的那一行的操作
所以如下修改

讯享网create TRIGGER payslip_delete after delete on payslip for each ROW begin update VIP_card set VIP_card.Remaining = Remaining + old.expenditure where VIP_card.IDnumber = old.IDnumber; end 

只需要把之前的new修改成old就好了

update操作一样的,你要加上之前错误的金额,再减去正确的金额,之前的就是对old的操作,减的内容是你新的内容就是多new的操作

create TRIGGER payslip_update after update on payslip for each ROW begin update VIP_card set VIP_card.Remaining = Remaining + old.expenditure - new.expenditure where VIP_card.IDnumber = new.IDnumber; end 
小讯
上一篇 2025-03-26 20:59
下一篇 2025-01-15 18:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/68947.html