it-swarm.com.de

Ist es möglich, eine vorhandene Triggerdefinition in MySQL zu ändern?

Ich frage mich, ob es möglich ist, eine Triggerdefinition 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?

15
Alex

Es hört sich so an, als würden Sie fragen, ob es möglich ist, einen Trigger in einer atomaren Operation zu ändern. Wenn die neue Definition fehlschlägt, verlieren Sie nicht die alte ... ähnlich wie bei CREATE OR REPLACE VIEW, das die Ansichtsdefinition ersetzt, wenn die neue Definition gültig ist, die alte jedoch beibehalten, wenn Sie sie nicht ersetzen können.

Leider gibt es kein ALTER TRIGGER oder CREATE 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.

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;

Update: MariaDB hat in Version 10.1.4 Unterstützung hinzugefügt CREATE OR REPLACE TRIGGER zu ihrem Drop-In-Ersatz für MySQL.

https://mariadb.com/kb/en/mariadb/create-trigger/

Oracle MySQL ab 5.7 basiert weiterhin auf der oben genannten Lösung.

20