Похоже, вы спрашиваете, возможно ли изменить триггер в атомарной операции, где, если новое определение не удается, вы не потеряете старое ... похоже на 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/
Oracle MySQL с версии 5.7 по-прежнему опирается на решение выше.