2013-10-01 83 views
1

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

是否有更新MySQL触发器的方法,以便只要触发器的表中的数据被操纵,触发器的旧版本或新版本就处于活动状态?

回答

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