Mysql Triggers
Introducción
- Un trigger viene a ser como un procedimiento almacenado que se ejecuta automáticamente cuando sobre una tabla se realiza alguna operación que implique modificar sus datos (DELETE, INSERT, UPDATE).
- Por lo tanto un trigger va a estar 'asociado' a una tabla y a un 'tipo de operación' sobre la tabla.
- Los usos que le podemos dar a un trigger son:
- Monotorizar y registrar operaciones sobre las tablas (podemos guardar información sobre quien y cuando se realizó alguna modificación).
- Verificar que los datos sean correctos antes de añadirlos o usarlos para una modificación.
- Un mecanismo para implementar columnas calculadas (por ejemplo, la tabla Libros tiene una columna 'numero de ejemplares' y disponemos de la tabla Ejemplares, donde guardamos cada ejemplar. Cada vez que demos de alta un nuevo ejemplo, tendremos que actualizar la columna de Libros).
- Copias de seguridad de los datos antes de que sean modificados o borrados.
Sintaxis
- Disponéis de la sintaxis completa en el siguiente enlace.
- Disponéis de varios ejemplos en este enlace.
- Básicamente cuando decidimos crear un trigger necesitamos determinar:
- Sobre qué tabla va a aplicarse el trigger.
- Sobre qué operación se va a aplicar (INSERT / DELETE / UPDATE)
- Queremos que el trigger se ejecute antes o después de que se realice la operación sobre la tabla (BEFORE => antes; AFTER => después).
- Indicar que si la operación SQL que va a provocar la ejecución del trigger afecta a múltiples filas (por ejemplo un borrado de muchas filas), el trigger se ejecutará una vez por cada fila afectada.
- Dentro del trigger vamos a poder acceder a los valores de la fila de la tabla anterior y posterior a la ejecución de la orden sql. Es decir, si realizo una operación de UPDATE sobre una columna, dicha columna tendrá un valor antes de la ejecución de la orden SQL y otro después de la ejecución, ya que le estoy enviando un nuevo valor. Dentro del trigger puedo acceder a dos 'alias' de la tabla a la que afecta el trigger con las mismas columnas que la tabla original:
- NEW: Tabla que posee los datos de cada columna con los nuevos valores.
- OLD: Tabla que posee los datos de cada columna con los valores antiguos.
- Por ejemplo:
- TABLA ALUMNOS:
- ---nif---- ---nombre----
- ---1a----- ---Angel-----
- Realiza una operación UPDATE con la orden: UPDATE ALUMNOS SET nombre = 'Pedro' WHERE nif='1a'
- Si tengo asociado un trigger UPDATE y que se ejecute antes de la orden SQL (tipo BEFORE), dentro del código del trigger:
- NEW.nombre tendrá el valor 'Pedro'.
- OLD.nombre tendrá el valor 'Angel'.
- Veamos un ejemplo sobre una tabla Alumnos con las siguientes columnas.
-- Ángel D. Fernández González -- (2017).