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

你可能感兴趣的:(sql)