在ALTER TABLE
命令之后,通常需要更新触发器,该触发器基于在更改的表上插入、更新或删除的数据而触发。不幸的是,DROP TRIGGER
并CREATE TRIGGER
导致隐式提交,因此不能简单地将这两个命令放在单个事务中,然后进行提交。
有没有办法更新 MySQL 触发器,以便每当操作带有触发器的表中的数据时,触发器的旧变体或新变体都处于活动状态?
在ALTER TABLE
命令之后,通常需要更新触发器,该触发器基于在更改的表上插入、更新或删除的数据而触发。不幸的是,DROP TRIGGER
并CREATE TRIGGER
导致隐式提交,因此不能简单地将这两个命令放在单个事务中,然后进行提交。
有没有办法更新 MySQL 触发器,以便每当操作带有触发器的表中的数据时,触发器的旧变体或新变体都处于活动状态?
您可以使用表锁定以原子方式修改触发器:
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