Можно ли изменить существующее определение триггера в MySQL?

14

Мне интересно, если можно обновить определение триггера в MySQL. Например, у меня есть триггер T, и я хочу добавить к нему новые функции.

Я предполагаю, что мне нужно сбросить и воссоздать его.

Каковы лучшие практики в администрировании базы данных для таких сценариев?

Alex
источник
Алекс, ты смотрел в документации MySQL для определения триггера? Что это сказал; В какой части вы не уверены или вызываете проблемы при их реализации?
Майкл Грин,
Я не нашел никакой информации в документации MySQL, можно ли обновить триггер или нет. Я предполагаю, что это невозможно, и я хочу перепроверить.
Алекс

Ответы:

19

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

Майкл - sqlbot
источник
2
«Oracle MySQL с версии 5.7 по-прежнему опирается на решение, описанное выше», - по-прежнему имеет место в версии 8.0
Пол Кэмпбелл,