Ich frage mich, ob es möglich ist, eine Trigger-Definition in MySQL zu aktualisieren. Zum Beispiel habe ich einen Trigger T und möchte ihm einige neue Funktionen hinzufügen.
Ich gehe davon aus, dass ich es löschen und neu erstellen muss.
Was sind die Best Practices in der Datenbankverwaltung für solche Szenarien?
Antworten:
Es hört sich so an, als würden Sie gefragt, ob es möglich ist, einen Auslöser in einer atomaren Operation zu ändern. Wenn die neue Definition fehlschlägt, verlieren Sie nicht die alte ... ähnlich der
CREATE OR REPLACE VIEW
, die die Ansichtsdefinition bei einer neuen Definition ersetzt ist gültig, lässt aber den alten bestehen, wenn Sie ihn nicht ersetzen können.Leider gibt es keine
ALTER TRIGGER
oderCREATE OR REPLACE TRIGGER
in MySQL.Ich würde vorschlagen, dass die beste Vorgehensweise darin besteht, die Tabelle zu sperren, in der sich der Trigger befindet, damit keine Zeilen betroffen sind, wenn der Trigger nicht vorhanden ist. Das Löschen und Hinzufügen von Triggern, während eine Tabelle gesperrt ist, ist zulässig.
Update: MariaDB hat in Version 10.1.4 die Unterstützung
CREATE OR REPLACE TRIGGER
für den Drop-In-Ersatz für MySQL hinzugefügt .https://mariadb.com/kb/en/mariadb/create-trigger/
Oracle MySQL ab 5.7 setzt weiterhin auf die oben genannte Lösung.
quelle