在ALTER TABLE
命令之后,通常需要更新触发器,该触发器基于在更改的表上插入,更新或删除的数据而触发。不幸的是,DROP TRIGGER
和CREATE TRIGGER
会导致implicit commits,所以不能简单地将这两个命令放在一个事务中,然后再提交。
有没有办法更新MySQL触发器,以便只要操作触发器表中的数据,触发器的旧变种或新变种就会处于活动状态?
答案 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