Material del curso de SQL de la UNACAR 2020
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

triggers.md 1.9 KiB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # Triggers
  2. 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.
  3. 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.
  4. *Sintaxis*
  5. ```
  6. CREATE
  7. [DEFINER = { user | CURRENT_USER }]
  8. TRIGGER trigger_name
  9. trigger_time trigger_event
  10. ON tbl_name FOR EACH ROW
  11. [trigger_order]
  12. trigger_body
  13. ```
  14. **Explicación**
  15. * DEFINER: Especifica el usuario de BBDD con privilegios para desencadenar un TRIGGER. Por defecto es el usuario que crea el TRIGGER.
  16. * trigger_name: Nombre del TRIGGER/disparador.
  17. * trigger_time: Especifica cuando se ha de ejecutar el TRIGGER, antes o después del evento detectado.
  18. * trigger_event: Evento que activa el TRIGGER –> INSERT, UPDATE y DELETE.
  19. * tbl_name: Nombre de la tabla en la que detectaremos el trigger_event.
  20. * 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).
  21. * trigger_body: Código del TRIGGER.
  22. ## Implementación
  23. 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.
  24. ```
  25. DELIMITER $$
  26. $$
  27. CREATE TRIGGER actualizar_precio_productos
  28. BEFORE UPDATE
  29. ON productos FOR EACH row
  30. BEGIN
  31. IF NEW.preciocompra <> OLD.preciocompra
  32. THEN
  33. SET NEW.precio = NEW.preciocompra * 1.16;
  34. END IF ;
  35. END
  36. $$
  37. DELIMITER ;
  38. ```
  39. Verificar que este funcionando el trigger
  40. ```
  41. SELECT * FROM productos WHERE id = 6;
  42. UPDATE productos SET preciocompra = 100 WHERE id = 6;
  43. SELECT * FROM productos WHERE id = 6;
  44. ```
  45. ## Eliminar un trigger
  46. ```
  47. DROP TRIGGER nombre_del_trigger
  48. ```