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;