mysql触发器中的new和old

原文链接:这里

0.前言
上一篇中,简单使用触发器同步俩个表的数据,但是出现了old和new的用法,这一篇文章中简单总结一下。

1.插入操作 insert
对于insert语句,如果原表中没有数据,那么对于插入数据后表来说新插入的那条数据就是new。比如下面是SQL

drop trigger if exists insert_tableB;
– 如果有这个触发器就先删除
create trigger insert_tableB
– 触发表名称 insert_tableB
after insert
– 触发条件,在insert操作之后
on tableA
– 需要在哪个表触发
for each row
begin
insert into tableB (code,id)
values(
new.code,
new.id
);
– sql语句
end;
当我们在tableA表中执行insert操作后,tableB表会自动插入一条数据,这个时候,这条数据用new表示。

2.更新操作 update
当使用update语句的时候,当修改原表数据的时候相对于修改数据后表的数据来说原表中修改的那条数据就是old,而修改数据后表被修改的那条数据就是new。

比如我们下面这个触发器:

drop trigger if exists update_tableB;
– 如果有这个触发器就先删除
create trigger update_tableB
– 触发表名称 update_tableB
after update
– 触发条件,在update操作之后
on tableA
– 需要在哪个表触发
for each row
begin
update tableB
set
code_code = new.code,
id_id =new.id
WHERE code_code=old.code;
– sql语句
end;
其中比较关键的是:

update tableB
set
code_code = new.code,
id_id =new.id
WHERE code_code=old.code;
可以看出,我们set的是新值(new)。而用where条件限定的是旧值(old)。

这样就完成更新操作了。

3.删除操作delete
当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说就是old。

比如下面这个触发器

drop trigger if exists delete_tableB;
– 如果有这个触发器就先删除
create trigger delete_tableB
– 触发表名称 delete_tableB
after DELETE
– 触发条件,在delete操作之后
on tableA
– 需要在哪个表触发
for each row
begin
DELETE from tableB
WHERE code_code=old.code;
– sql语句
end;
可以看出,我们删除B表的操作,where限定条件也是old。

4.简单总结
old表示插入之前的值,new表示新插入的值;old用在删除和修改,new用在添加和修改。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值