首页,MySQL不允许在触发器中对触发器本身绑定的表进行操作,否则会有如下报错:
[Err] 1442 - Can't update table 'sss' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
怎么解决呢,看下面一个例子。
当sss这个表的c1字段值为2或3时,要求自动设置c2字段的值为1,否则字段设置为0。当然,要求新增和修改的时候,都要能够同步操作。
DROP TRIGGER tri_sss; delimiter $$ CREATE TRIGGER `tri_sss` BEFORE INSERT ON ss FOR EACH ROW BEGIN IF NEW.c1 = 2 || NEW.c1 = 3 THEN SET new.c2 = 1; ELSE SET new.c2 = 0; END IF; END $$ delimiter ; DROP TRIGGER tri_sss_UPDATE; delimiter $$ CREATE TRIGGER `tri_sss_UPDATE` BEFORE UPDATE ON ss FOR EACH ROW BEGIN IF NEW.c1 = 2 || NEW.c1 = 3 THEN SET new.c2 = 1; ELSE SET new.c2 = 0; END IF; END $$ delimiter ;
大概看明白了,上面两个触发器,一个是管insert,另一个管update。当NEW.c1为2或3时,执行new.c2 = 1。当然这中间最重要的一点是“BEFORE”,在INSERT和UPDATE之前都有一个BEFORE,绝对不能写成AFTER了。就是说,我们这个操作,是在真正插入之前进行,而不是在插入之后!
关于MySQL触发器更新当前表的记录报错的解决办法,本文就介绍这么多,希望对大家有所帮助!
要饭二维码
洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权
本文属于“洪哥笔记”原创文章,转载请注明来源地址:MySQL触发器更新当前表的记录报错的解决:http://www.splaybow.com/post/mysql-trigger-table-new-befor-09109.html
如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D!
发布时间:2021/8/1 7:28:56 | 编辑:洪哥 | 分类:MySQL | 浏览: