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 TRIGGERveya 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 TRIGGERMySQL'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.