1

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

有没有办法更新 MySQL 触发器,以便每当操作带有触发器的表中的数据时,触发器的旧变体或新变体都处于活动状态?

4

1 回答 1

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

于 2016-05-24T10:49:06.867 回答