1

コマンドの後ALTER TABLEに、変更されたテーブルで挿入、更新、または削除されたデータに基づいて起動するトリガーを更新する必要があるのは一般的です。残念ながら、暗黙的なコミットがDROP TRIGGER発生CREATE TRIGGERするため、これら 2 つのコマンドを単一のトランザクションに単純に配置してからコミットすることはできません。

トリガーを持つテーブル内のデータが操作されるたびにトリガーの古いバリアントまたは新しいバリアントがアクティブになるように、MySQL トリガーを更新する方法はありますか?

4

1 に答える 1

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

于 2016-05-24T10:49:06.867 に答える