|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # Triggers
-
- Técnicamente, un trigger es un objeto de una base de datos que está asociado a una tabla, y que será activado cuando la acción que tiene asociada tiene lugar.
-
- El trigger se puede ejecutar cuando tiene lugar una acción INSERT, UPDATE o DELETE, siendo posible su ejecución tanto antes como después del evento.
-
- *Sintaxis*
-
- ```
- CREATE
- [DEFINER = { user | CURRENT_USER }]
- TRIGGER trigger_name
- trigger_time trigger_event
- ON tbl_name FOR EACH ROW
- [trigger_order]
- trigger_body
- ```
- **Explicación**
- * DEFINER: Especifica el usuario de BBDD con privilegios para desencadenar un TRIGGER. Por defecto es el usuario que crea el TRIGGER.
- * trigger_name: Nombre del TRIGGER/disparador.
- * trigger_time: Especifica cuando se ha de ejecutar el TRIGGER, antes o después del evento detectado.
- * trigger_event: Evento que activa el TRIGGER –> INSERT, UPDATE y DELETE.
- * tbl_name: Nombre de la tabla en la que detectaremos el trigger_event.
- * trigger_order: Una tabla puede tener asociados varios TRIGGER, por defecto la ejecución de cada uno es el orden en el que fuero creados. Para alterar ese orden podemos definirlos con FOLLOWS (depués de nombre trigger) y con PRECEDE (antes de nombre_trigger).
- * trigger_body: Código del TRIGGER.
-
- ## Implementación
-
- hagamos un triger que al definir un precio de compra indique que el precio de venta es un 16% mas para incrementarle el IVA del producto.
-
- ```
- DELIMITER $$
- $$
- CREATE TRIGGER actualizar_precio_productos
- BEFORE UPDATE
- ON productos FOR EACH row
- BEGIN
- IF NEW.preciocompra <> OLD.preciocompra
- THEN
- SET NEW.precio = NEW.preciocompra * 1.16;
- END IF ;
- END
- $$
- DELIMITER ;
- ```
-
- Verificar que este funcionando el trigger
-
- ```
- SELECT * FROM productos WHERE id = 6;
- UPDATE productos SET preciocompra = 100 WHERE id = 6;
- SELECT * FROM productos WHERE id = 6;
- ```
-
- ## Eliminar un trigger
-
- ```
- DROP TRIGGER nombre_del_trigger
- ```
|