Implementación de triggers en MySQL

Puedes definir un máximo de 6 triggers por tabla en versiones 5.7.2 y anteriores:
  • BEFORE INSERT
  • AFTER INSERT
  • BEFORE DELETE
  • AFTER DELETE
  • BEFORE UPDATE
  • AFTER UPDATE
A partir de esta versión puedes definir múltiples triggers para el mismo evento de trigger y momento de acción.

Los triggers sólo pueden activarse con eventos de INSERT, DELETE o UPDATE, si utilizamos otras instrucciones para manipular los datos, p. ej. TRUNCATE, nunca se lanzará el trigger asociado con el borrado.

Sin embargo si usas instrucciones que en su proceso de ejecución utilizan INSERT, DELETE o UPDATE si que se lanzará el trigger, por ejemplo si utilizas REPLACE al ejecutar en ese proceso INSERT el trigger asociado si que se ejecuta.

Cada trigger debe tener un nombre único por cada tabla, es una buena práctica de todas maneras que tenga un nombre único para toda la base de datos.

Yo utilizo siempre esta convención:

(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)

MySQL almacena los triggers en la carpeta /data/classicmodels/ con los nombres tablename.TRG (el mapeo del trigger con su tabla correspondiente) y tablename.TAR (la definición del trigger).

Puedes hacer backup de los triggers agregándolos al MySQL DUMP.

Los triggers permiten ejecutar instrucciones de MySQL con algunas limitaciones:
  • No pueden ejecutar SHOW, LOAD DATA, LOAD TABLE, BACKUP DATABASE, RESTORE, FLUSH y RETURN.
  • Usar instrucciones que modifiquen la estructura de las tablas como COMMIT, ROLLBACK, START TRANSACTION, LOCK/UNLOCK TABLES, ALTER, CREATE, DROPRENAME.
  • Usar instrucciones preparadas como PREPARE y EXECUTE.
  • Usar sentencias de MySQL dinámicas.
Espero que os sea de utilidad :).


Comentarios