Diferencia entre revisiones de «Mysql Triggers»
Ir a la navegación
Ir a la búsqueda
| Línea 15: | Línea 15: | ||
* Disponéis de la sintaxis completa [https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html en el siguiente enlace]. | * Disponéis de la sintaxis completa [https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html en el siguiente enlace]. | ||
: Disponéis de varios ejemplos [https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html en este enlace]. | : Disponéis de varios ejemplos [https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html 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. | * Veamos un ejemplo sobre una tabla Alumnos con las siguientes columnas. | ||
Revisión del 09:18 15 mar 2018
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).