Kedengarannya seperti Anda bertanya apakah mungkin untuk mengubah pemicu dalam operasi atom, di mana, jika definisi baru gagal, Anda tidak kehilangan yang lama ... mirip dengan CREATE OR REPLACE VIEW
, yang menggantikan definisi tampilan jika definisi baru valid, tetapi biarkan yang lama ada di tempatnya, jika Anda tidak bisa menggantinya.
Sayangnya, tidak ada ALTER TRIGGER
atau CREATE OR REPLACE TRIGGER
di MySQL.
Saya menyarankan bahwa praktik terbaik adalah mengunci meja tempat pemicunya tinggal, jadi tidak ada baris yang terpengaruh dengan pemicu yang tidak ada. Menjatuhkan dan menambahkan pemicu saat meja dikunci diizinkan.
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;
Pembaruan: MariaDB, dalam versi 10.1.4, menambahkan dukungan CREATE OR REPLACE TRIGGER
pada pengganti drop-in untuk MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
Oracle Oracle hingga 5.7 masih mengandalkan solusi di atas.