Чи можливо змінити існуюче визначення тригера в MySQL?


14

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

Моє припущення, що мені потрібно це скинути і відтворити.

Які найкращі практики адміністрування баз даних для таких сценаріїв?


Алекс, ти шукав документацію на 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/

MySQL Oracle станом на 5.7 все ще покладається на рішення, яке було зазначено вище.


2
"MySQL Oracle станом на 5.7 все ще покладається на рішення вище" - все ще справа у версії 8.0
Пол Кемпбелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.