Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在事务中更改MySQL触发器_Mysql_Triggers_Transactions - Fatal编程技术网

在事务中更改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及更新版本中工作

不久前,我写了一篇关于这一点的博客: