Parece que está preguntando si es posible alterar un disparador en una operación atómica, donde, si la nueva definición falla, no pierde la anterior ... similar a CREATE OR REPLACE VIEW
, que reemplaza la definición de vista si la nueva definición es válido, pero deja el antiguo en su lugar, si no puede reemplazarlo.
Lamentablemente, no hay ALTER TRIGGER
o CREATE OR REPLACE TRIGGER
en MySQL.
Sugeriría que la mejor práctica es bloquear la mesa donde vive el gatillo, de modo que no haya filas afectadas con el gatillo ausente. Se permite colocar y agregar disparadores mientras una tabla está bloqueada.
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;
Actualización: MariaDB, en la versión 10.1.4, agregó soporte CREATE OR REPLACE TRIGGER
a su reemplazo directo para MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
MySQL de Oracle a partir de 5.7 todavía se basa en la solución anterior.