问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

触发器before和after有什么区别?

发布网友 发布时间:2022-04-08 02:27

我来回答

3个回答

懂视网 时间:2022-04-08 06:48

before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。

 

对于INSERT语句, 只有NEW是合法的;

对于DELETE语句,只有OLD才合法;

对于UPDATE语句,NEW、OLD可以同时使用。

 

例子如下:

1 mysql> select * from t1; 
2 +----+-------+
3 | id | name |
4 +----+-------+
5 | 1 | zhang |
6 +----+-------+

 

1 mysql> delimiter //
2 mysql> create trigger tb before update on t1 
3 -> for each row
4 -> begin
5 -> set NEW.id=NEW.id+5;
6 -> set NEW.name=upper(NEW.name);
7 -> insert into t2 values(NEW.id,NEW.name);
8 -> end;//

 

1 分隔符换回分号
2 mysql> delimiter ;

 

 1 mysql> update t1 set name=‘huang‘ where id=1;
 2 Query OK, 1 row affected (0.01 sec)
 3 Rows matched: 1 Changed: 1 Warnings: 0
 4 
 5 mysql> select * from t1 ;   
 6 +----+-------+
 7 | id | name |
 8 +----+-------+
 9 | 6 | HUANG |
10 +----+-------+
11 1 row in set (0.00 sec)
1 mysql> select * from t2;
2 +----+-------+
3 | id | name |
4 +----+-------+
5 | 6 | HUANG |
6 +----+-------+
7 1 row in set (0.00 sec)

 

由上可知,如果trigger用的是before,则可以修改new的值,并写入到数据库中

 

 1 同样的代码,把before改成after,则会报错
 2 mysql> delimiter //
 3 mysql> create trigger ta after update on t1 
 4 -> for each row
 5 -> begin
 6 -> set NEW.id=NEW.id+5;
 7 -> set NEW.name=upper(NEW.name);
 8 -> insert into t2 values (NEW.id,NEW.name);
 9 -> end;//
10 ERROR 1362 (HY000): Updating of NEW row is not allowed in after trigger

 

将after内容改写如下:运行正常

 1 mysql> delimiter //
 2 mysql> create trigger ta after update on t1 for each row
 3 -> begin
 4 -> insert into t2 values (OLD.id,NEW.name);
 5 -> end;//
 6 Query OK, 0 rows affected (0.00 sec)
 7 
 8 mysql> delimiter ;
 9 mysql> update t1 set name=‘chen‘ where id=6;
10 
11 mysql> select * from t1;
12 +----+------+
13 | id | name |
14 +----+------+
15 | 6 | chen |
16 +----+------+
17 1 row in set (0.00 sec)
18 
19 mysql> select * from t2;
20 +----+-------+
21 | id | name |
22 +----+-------+
23 | 6 | HUANG |
24 | 6 | chen |
25 +----+-------+
26 2 rows in set (0.00 sec)

 

 总结如下:

after—是在记录操纵之后触发,是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作
before—是在记录操纵之前触发,是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作,如:我们在触发之前需要判断new值和old值的大小或关系,如果满足要求就触发,不通过就修改再触发;如:表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,这里before相当于设置了断点,我们可以处理删除外键。

 

数据库中触发器before与after认识

标签:

热心网友 时间:2022-04-08 03:56

呵呵,看来你不熟悉触发器呀
无论是insert触发器还是update触发器,他都有一个before或者after关键字
before 就是在insert或update之前执行触发器
after 就是在insert或update之后执行触发器
例:
CREATE OR REPLACE TRIGGER TR_1 before UPDATE ON TABLE
这和在触发器中用inserted 和updated没关系

热心网友 时间:2022-04-08 05:14

before是在数据库操作之前做触发,
after是在数据库操作之后做触发
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“晚来天欲雪,能饮一杯无?”是什么意思_出处及原文翻译_学习力 胸肌中部怎么练 血沉高是怎么回事,怎样才能降低啊! 中海锦江城多久交房 “QMS”作为“质量管理体系”的英文缩写,其背后理论及应用如何?_百度... 我用QQ登的快手绑定了一个电话号码,电话号码不用了,现在怎么能登得进去... 桂林银行白金客户条件 桂林银行最高等级卡 iQOO 11系列曝光,预计年底正式发布! vivo X90先别买?iQOO 11系列配置堪称豪华 为什么吧里有人说IPS漏光是普遍现象,每台机都会有 凯蒂·赫尔姆斯的主要作品 这个IPS屏的漏光情况算正常还是严重啊? 凯蒂·赫尔姆斯演过哪些影视剧? 笔记本ips屏漏光正常么?6799买的本子! 液晶显示器都漏光吗 尤其是IPS屏幕的 关于Katharine和Claire英文名 ips屏幕漏光会恢复吗 clareckatie和ck区别 IPS屏幕真的避免不了有漏光吗?绝对会有吗? ClarecKatie这个品牌,大家是怎么看的? 是不是ips显示器漏光 克莱凯蒂(ClarecKatie)是新牌子吗? 捏ips屏幕会导致漏光吗? ips屏幕漏光属于正常吗? ips屏幕漏光要退吗 IPS屏显示器都有漏光现象吗? 请问IPS显示器漏光到什么程度才算严重? ips屏幕 为什么漏光 为什么在晓黑板中老师发的讨论不能参与? 鱼胶45块一克贵吗? 鱼胶的(两底)计算方法 鱼胶买卖算法是怎么算的,钱底,两底? 15g鱼胶,1300元1斤等多少钱? vivoy70s如何刷机? 我的vivo y70s忘记密码刷机清除数据时还是需要锁屏密码怎么办? vivo 手机怎么刷机 vivoy70s能不能更新最新的系统? Vivo 5G y70x,如何刷机? vivoy70s手机升级originos- 问一问 江苏省高中生化学奥林匹克竞赛的颁奖单位是什么 江苏化学网,化学竞赛成绩查询 扬子石化杯”第25届全国高中学生化学竞赛(江苏赛区)选拔赛暨夏令营 成绩查询!!!! 黄维的学术兼职 帮忙翻译几句英语 要专业哦 有哪些企业生产双酚A 江苏化学为什么学物质结构性质而不学化学反应原理 江苏省学化学的学生越来越少, 江苏省化学竞赛 一年时间 怎么准备呢? (目标是省一) 江苏化学竞赛一等奖公布时间 二等奖是不是什么用也没有