Mysql Triggers

De MediaWiki
Ir a la navegación Ir a la búsqueda

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