ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

关于 MySQL trigger 的 after update 的一点理解

2022-01-21 15:07:12  阅读:170  来源: 互联网

标签:语句 after update 小尾巴 trigger 执行 id


先给结论,trigger 可以看成是 给操作表的 update 语句加上一个小尾巴,这个小尾巴不捣乱,update 语句就能顺利的更改表,如果这个小尾巴想破环,那么 update 整条语句就不能正确执行,导致更新表失败。
解释如下,
当给一个表,加了 update trigger,这是前提,
当对一个表的 update,最终是否能成功更新表,也就是将更新的结果写进表中,要看这步操作触发的 trigger 是否同意,如果,trigger 允许,那么 update 就可以成功把结果写进表中达到更新的目的,但是,如果 , trigger 不同意,那么即使 update 语句本身没有问题其自身执行也很顺利,也不能把结果写入表中。
在 trigger 中,
trigger 的语句 after update 这一步的结果是 ,
update 命令 顺利执行了,但表还没有被更改,记录还没有改写,
接下来,还要看trigger 是否同意 update 去修改表,

按正常的情况,表就被更新了,
但,这是在 trigger 中,我们可以 ,让它新,也可以,不让它更新,
这取决于我们对 trigger 的设置,

能这样的原因,是,trigger 会 on 到一个 表上,关联 update 操作
当,对这个表 进行 update 操作的时候,会触发 trigger ,
请注意,这时候,update 虽然 已经执行了,但是,还没有能真正去 改变表,
因为,它 触发了 trigger,还要等 trigger 的意见。

我做了个实验,给我的感觉是,一旦给 表 建立了一个 由 update 触发的 trigger ,
当对表执行 update 时,这条 update 语句就加上了一个小尾巴,
如果,这个小尾巴 报错,那么这条 update 整条语句就会出错,导致 update 没有执行成功,

举个最简单的例子,

update tablename set id=1 where id=1;

但是如果,我们给这条语句加上一个小尾巴,比如 几个空格,如下:

update tablename set id=1 where id=1     ;

并不会影响 update 的正确执行,

但,如果,我们给 加上个 星号 什么的,如下:

update tablename set id=1 where id=1 *;

那么这条语句,必定报错,从而,执行失败,必须等你我们将 星号这个小尾巴去掉,语句才能正常执行,

trigger 就是起到这个小尾巴的作用,

产生这篇文章的原因是:
我在做实验的时候,遇到了
after update on tablename
这条语句,
我始终想不明白,update 都已经 先于 trigger 执行了,即便 trigger 不同意,又能怎么样呢,你毕竟是,after update,在update 执行之后 才出现的, 所以,update 都已经执行了,结果都写到表里了,你trigger不同意又能怎样呢!
但,我还是年轻啊,trigger 可没有这么简单,
它把自己和 update 捆绑到一起了,
相当于 给 update 语句 加了个小尾巴,
trigger 想让 update 执行成功,小尾巴就是 空格,
trigger 不想让 update 执行成功,小尾巴就是 *星号,

上例子,
在这里插入图片描述

我有一个 trigger 叫 limitprice关于 表 g 的 update 操作,
作用是,当要 updateg 的时候,如果新值 比 原值 大 1/5 以上,就不能更改表,

展现一下 表 g,
在这里插入图片描述
毛笔,id=1,price=5,
5的 1/5 是 1,
所以,大于6 的新值都不能写进表里,
做2个验证,

在这里插入图片描述
可以看出来,trigger 就是通过,把自己和 update 语句 绑定到一起,来达到 控制 update 语句是否可以成功执行的目的,
这里的,after ,虽然是update 先于 trigger 执行 ,但update 语句 成不成功 还得看 trigger。

在这里插入图片描述
不知道,为什么,我用的这个版本,before 和 after 的 trigger 效果一样,
先,写到这里吧,可能是我的MySQL 出现了问题,
按道理说,before 和 after 应该有区别才对。
January the 20th 2022 Friday

标签:语句,after,update,小尾巴,trigger,执行,id
来源: https://blog.csdn.net/m0_47505062/article/details/122619302

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有