更改事务中的MySQL触发器

时间:2013-10-01 21:48:21

标签: mysql triggers transactions

ALTER TABLE命令之后,通常需要更新触发器,该触发器基于在更改的表上插入,更新或删除的数据而触发。不幸的是,DROP TRIGGERCREATE TRIGGER会导致implicit commits,所以不能简单地将这两个命令放在一个事务中,然后再提交。

有没有办法更新MySQL触发器,以便只要操作触发器表中的数据,触发器的旧变种或新变种就会处于活动状态?

1 个答案:

答案 0 :(得分:1)

您可以使用表锁定以原子方式修改触发器:

LOCK TABLES `mytable` WRITE;  

 DELIMITER $$    
   DROP TRIGGER `mytable_tri` $$  
   CREATE TRIGGER `mytable_tri` AFTER INSERT ON `mytable`  
      FOR EACH ROW BEGIN  
      /* ...... trigger code ......... */  
   END;  
   $$  
 DELIMITER ;  

 UNLOCK TABLES;

适用于MySQL 5.6及更高版本。

我前段时间写了一篇博文:http://vkwww.blogspot.com/2014/07/alter-trigger-in-mysql.html