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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值