在事务中更改MySQL触发器
执行在事务中更改MySQL触发器,mysql,triggers,transactions,Mysql,Triggers,Transactions,执行ALTER TABLE命令后,通常需要更新触发器,该触发器根据在修改后的表上插入、更新或删除的数据触发。不幸的是,DROP-TRIGGER和CREATE-TRIGGER会导致错误,因此不能简单地将这两个命令放在一个事务中,然后执行提交 是否有一种方法可以更新MySQL触发器,以便每当操作带有触发器的表中的数据时,触发器的旧版本或新版本都处于活动状态?您可以使用表锁定以原子方式修改触发器: LOCK TABLES `mytable` WRITE; DELIMITER $$
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及更新版本中工作
不久前我写了一篇关于这一点的博文:您可以使用表锁定以原子方式修改触发器:
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及更新版本中工作
不久前,我写了一篇关于这一点的博客: