Triggers en MySql
¿Qué son los triggers?
Los Triggers son objetos de una base de datos, pero no son globales (como si lo son los procedimientos y funciones). Estos objetos se vinculan a una tabla y se activan automáticamente al realizar un INSERT,UPDATE o DELETE sobre la tabla vinculada.
NOTA: Los triggers solo se ejecutan cuando hay un INSERT,UPDATE o DELETE. Si colocas un SELECT, MySql se quejara.
IMPORTANTE: Dentro del trigger no podes hacer un INSERT, DELETE, UPDATE a un campo de la tabla con la que estas vinculando el trigger. Te daría el error 1442. Este error ocurre por que MySql no puede eliminar,insertar o actualizar un campo de una entidad que esta consultando, porque terminaría siendo una llamada recursiva.
Entonces tenemos una Tabla 1 al cual se vincula uno o varios triggers. Cuando ejecutamos una consulta INSERT, DELETE, UPDATE sobre Tabla 1 el trigger se desencadena modificando registros de las tablas Tabla 2 o Tabla N.
Sintaxis
CREATE TRIGGER : Palabras claves que le dicen a MySql que vas a crear un trigger.
nombre_disp : Es el nombre del triggers. Se suele colocar la acción que va hacer el trigger
momento_disp : Aquí hay dos palabras para especificar el momento en el que el trigger se ejecutara.
BEFORE (antes) AFTER (después).
evento_disp : Aquí va ir una de las clausulas INSERT, UPDATE, DELETE.
nombre_tabla : El nombre de la tabla con el cual el triggers sera vinculado.
FOR EACH ROW : Significa que para cada registro INSERTADO, ELIMINADO O ACTUALIZADO se ejecutara un conjunto de sentencias.
sentencia_disp : Las sentencias que serán ejecutadas cuando al activarse el triggers.
Variables OLD y NEW
Hay dos variables (velas de esa forma) que se utilizan para acceder a los valores ya sean nuevos o viejos.
La regla para utilizar estas variables es la siguiente:
INSERT = NEW . No puedes acceder a un valor que no tenes, por eso se utiliza NEW.
DELETE = OLD. No podes eliminar un registro que no existe, por eso se utiliza OLD. OLD hace referencia a una fila existente en tu tabla.
UPDATE = NEW y OLD.
INSERT
INSERT INTO PRODUCTOS(CANT_PRODUCTOS) VALUES(45)
NEW.CANT_PRODUCTOS = 45
DELETE
DELETE FROM PRODUCTOS WHERE ID = 45
OLD.ID = 45 (se asume que hay un registro en tu tabla con una id=45)
Ejemplo:
Con el fin de poner en practica lo que se explico anteriormente vamos a crear 2 tablas que tengan la misma cantidad de campos de manera que lo que hagamos en una se reflejara en la otra.
INSERT
Crearemos un trigger para insertar datos. Los datos de la tabla productos2 tendran el nombre más la cadena "productos2"
Imagen 4- Trigger INSERTAR_PRODUCTO2 |
Insertamos el siguiente registro en la tabla productos:
INSERT INTO productos(NOMBRE,CANTIDAD_PRODUCTOS) VALUES("HARINA",150);
Resultado de la tabla productos
Imagen 6- Resultado de la tabla producto2 |
DELETE
Ahora creamos el trigger para eliminar los datos
Imagen 7- ELIMINAR_PRODUCTO2 |
El resultado que obtendrás es la eliminación de ambas filas en ambas tablas
UPDATE
Ahora crearemos un trigger que al momento de descontar cantidad de productos los registros se disminuyen en 1.
Las entidades quedaron de esta manera
Imagen 8- Estado de la tabla producto después de ejecutar el DELETE |
Imagen 9- Estado de la tabla producto2 después de ejecutar el DELETE |
Imagen 10- ACTULIZAR_PRODUCTO2 |
Imagen 11- Resultado de la consulta UPDATE |
Imagen 12- Resultado de la consulta UPDATE |
Comentarios
Publicar un comentario