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

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