Здається, ви запитуєте, чи можна змінити тригер в атомній операції, де, якщо нове визначення не вдасться, ви не втратите старе ... подібне CREATE OR REPLACE VIEW, яке замінює визначення подання, якщо нове визначення дійсний, але старий залишає на місці, якщо ви не можете його замінити.
На жаль, немає ALTER TRIGGERабо CREATE OR REPLACE TRIGGERв MySQL.
Я б припустив, що найкраща практика - заблокувати таблицю, де живе тригер, тому жодні рядки не впливають на відсутність тригера. Допускається видалення та додавання тригерів під час блокування таблиці.
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 TRIGGERдо їх заміни для MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
MySQL Oracle станом на 5.7 все ще покладається на рішення, яке було зазначено вище.