Здається, ви запитуєте, чи можна змінити тригер в атомній операції, де, якщо нове визначення не вдасться, ви не втратите старе ... подібне 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 все ще покладається на рішення, яке було зазначено вище.