Zastanawiam się, czy można zaktualizować definicję wyzwalacza w MySQL. Na przykład mam wyzwalacz T i chcę dodać do niego nowe funkcje.
Zakładam, że muszę to upuścić i odtworzyć.
Jakie są najlepsze praktyki w administrowaniu bazą danych dla takich scenariuszy?
Odpowiedzi:
Wygląda na to, że pytasz, czy można zmienić wyzwalacz w operacji atomowej, w przypadku gdy nowa definicja zawiedzie, nie stracisz starej ... podobnej do
CREATE OR REPLACE VIEW
, która zastępuje definicję widoku, jeśli nowa definicja jest ważny, ale pozostawia stary na swoim miejscu, jeśli nie możesz go wymienić.Niestety nie ma
ALTER TRIGGER
lubCREATE OR REPLACE TRIGGER
w MySQL.Sugerowałbym, że najlepszą praktyką jest zablokowanie tabeli, w której żyje spust, aby nie wpływać na rzędy przy nieobecności spustu. Dozwolone jest upuszczanie i dodawanie wyzwalaczy, gdy tabela jest zablokowana.
Aktualizacja: MariaDB w wersji 10.1.4 dodała obsługę
CREATE OR REPLACE TRIGGER
zastępowania MySQL.https://mariadb.com/kb/en/mariadb/create-trigger/
Oracle MySQL od 5.7 nadal opiera się na powyższym rozwiązaniu.
źródło