Atomik bir işlemde bir tetikleyiciyi değiştirmenin mümkün olup olmadığını soruyorsunuz gibi görünüyor, burada, yeni tanım başarısız olursa, eskisini kaybetmezsiniz ... benzer CREATE OR REPLACE VIEW
, yeni tanım varsa görünüm tanımının yerini alır geçerli, ancak değiştiremiyorsanız eski olanı yerinde bırakır.
Ne yazık ki, MySQL'de yok ALTER TRIGGER
veya var CREATE OR REPLACE TRIGGER
.
En iyi uygulamanın tetiğin yaşadığı masayı kilitlemektir, bu nedenle tetikleyici yokken hiçbir satır etkilenmez. Bir tablo kilitliyken bırakma ve tetikleme ekleme işlemine izin verilir.
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;
Güncelleme: MariaDB, 10.1.4 sürümünde, CREATE OR REPLACE TRIGGER
MySQL'in yerine geçmelerine destek verdi.
https://mariadb.com/kb/en/mariadb/create-trigger/
Oracle'ın 5.7 itibariyle MySQL'i hala yukarıdaki çözüme güveniyor.