39. Triggers o disparadores

Los triggers son objetos que se utilizan para ejecutar de forma automática una acción en respuesta a ciertos eventos dentro de la base de datos. Es como los manejadores de eventos en Javascript pero en bases de datos. Estos eventos se van a disparar cuando se lleguen a ejecutar entre la base de datos alguna operación que afecte datos, es decir, un INSERT, un UPDATE o un DELETE.

Los triggers manejan una sintaxis, es como un stored procedure, sólo que este lo tienes que lanzar, mientras que los triggers se ejecutan cuando se genera un INSERT, DELETE o UPDATE, y puede pegar información a una tabla.  Como un trigger puede tener más de una linea de código, sigue la lógica vista en los disparadores.

Los triggers tienen una sintaxis muy particular.

Sintaxis

DELIMITER //

CREATE TRIGGER nombre_trigger
  [BEFORE | AFTER]
  [INSERT | UPDATE | DELETE]
  ON nombre_tabla
  FOR EACH ROW
BEGIN

END  
DELIMITER ;

Vamos a aprovechar el ejercicio del capítulo de los disparadores, y vamos a crear una tabla más, denominada actividad_clientes.

Ejm

CREATE TABLE actividad_clientes (
ac_ci INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente INT UNSIGNED,
fecha DATETIME,
FOREIGN KEY (cliente)
 REFERENCES clientes(cliente_id)
 ON DELETE RESTRICT
 ON UPDATE CASCADE
);

Esta tabla la relacionamos con el cliente y almacenamos la fecha porque lo que nos interesa es llevar un registro de cuando fueron las actividades de los clientes, de tal manera que podamos sacar un reporte de los mismos.

Sigamos trabajando en el ejm

Ejm

SELECT * FROM subscripciones;
SELECT * FROM clientes;
SELECT * FROM tarjetas;
SELECT * FROM servicios;
SELECT * FROM actividad_clientes;

Vamos a hacer que cuando creemos un nuevo servicio, automáticamente vaya a la tabla actividad_clientes y cree un registro de las actividades de los clientes.

Sigamos con nuestro ejm, y vamos a crear el código del trigger.

Ejm

DELIMITER //

CREATE TRIGGER  tg_actividad_clientes
 AFTER INSERT
 ON clientes
 FOR EACH ROW

 BEGIN
  INSERT INTO actividad_cliente VALUES (0, NEW.cliente_id, NOW()) 
 END //
 

DELIMITER ;

Para ver los triggers de una base de datos se ejecuta la siguiente consulta

Sintaxis

SHOW TRIGGERS FROM base_de_datos;

Para eliminar un trigger se utiliza la siguiente sintaxis.

Sintaxis

DROP TRIGGER nombre_trigger;
Scroll al inicio