MySQLの既存のトリガー定義を変更することはできますか?


14

MySQLでトリガー定義を更新できるかどうか疑問に思っています。たとえば、トリガーTがあり、いくつかの新しい機能を追加したいです。

私の想定では、ドロップして再作成する必要があります。

このようなシナリオのデータベース管理のベストプラクティスは何ですか?


アレックス、トリガーの定義についてはMySQLのドキュメントを参照しましたか?何と言いましたか。どの部分がよくわからないのか、それらを実装しようとすると問題が発生しますか?
マイケルグリーン14年

トリガーを更新できるかどうかにかかわらず、MySQLのドキュメントに情報が見つかりませんでした。不可能だと思いますので、もう一度確認したいと思います。
アレックス14年

回答:


19

アトミック操作でトリガーを変更できるかどうかを尋ねているようですが、新しい定義が失敗しても古いものは失われません... CREATE OR REPLACE VIEW新しい定義がビュー定義を置き換える場合と同様有効ですが、交換できない場合は古いものをそのまま残します。

残念ながら、ありませんALTER TRIGGERCREATE OR REPLACE TRIGGERMySQLの中で。

トリガーが存在する場所にテーブルをロックすることをお勧めします。トリガーがない場合、行に影響はありません。テーブルがロックされている間にトリガーをドロップおよび追加することは許可されています。

mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock
mysql> DROP TRIGGER t1_bi; 
mysql> DELIMITER $$
mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW 
       BEGIN
       ...
       END $$
mysql> DELIMITER ;
mysql> UNLOCK TABLES;

更新:MariaDBバージョン10.1.4では、CREATE OR REPLACE TRIGGERMySQLのドロップイン置換のサポートが追加されました。

https://mariadb.com/kb/en/mariadb/create-trigger/

5.7の時点でのOracleのMySQLは、上記のソリューションに依存しています。


2
バージョン8.0でまだケース- 「5.7のようにOracleのMySQLはまだ上記の溶液に依存している」
ポール・キャンベル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.