¿Es posible modificar una definición de disparador existente en MySQL?


14

Me pregunto si es posible actualizar una definición de disparador en MySQL. Por ejemplo, tengo un disparador T y quiero agregarle alguna funcionalidad nueva.

Mi suposición es que necesito soltarlo y recrearlo.

¿Cuáles son las mejores prácticas en la administración de la base de datos para tales escenarios?


Alex, ¿has buscado en la documentación de MySQL la definición del disparador? Qué decía; ¿de qué parte no está seguro o le está causando problemas cuando intenta implementarlos?
Michael Green

No encontré ninguna información en la documentación de MySQL si es posible actualizar un activador o no. Supongo que es imposible y quiero verificarlo dos veces.
Alex

Respuestas:


19

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 TRIGGERo CREATE OR REPLACE TRIGGERen 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 TRIGGERa 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.


2
"El MySQL de Oracle a partir de la versión 5.7 todavía se basa en la solución anterior" - sigue siendo el caso en la versión 8.0
Paul Campbell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.