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
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 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.