Trigger en MySQL
Un trigger en MySQL es un procedimiento almacenado que se ejecuta automáticamente
cuando se produce un evento específico en una tabla, como INSERT, UPDATE o DELETE. Pueden
utilizarse para aplicar reglas de negocio, auditar cambios en los datos, o mantener la integridad
referencial, entre otras cosas.
Sintaxis Básica:
CREATE TRIGGER nombre_trigger
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON nombre_tabla
FOR EACH ROW
BEGIN
-- Sentencias SQL aquí
END;
Ejemplo 1: Trigger para auditar cambios en una tabla
Supongamos que tenemos una tabla llamada clientes y queremos mantener un registro de los
cambios realizados en ella.
sql
CREATE TRIGGER auditar_cambios_clientes
AFTER INSERT ON clientes
FOR EACH ROW
BEGIN
INSERT INTO registro_cambios_clientes (accion, fecha, cliente_id)
VALUES ('INSERT', NOW(), [Link]);
END;
Ejemplo 2: Trigger para mantener la integridad referencial
Si queremos asegurarnos de que cada vez que se elimine un registro de una tabla ordenes,
también se eliminen registros relacionados en la tabla detalles_ordenes.
CREATE TRIGGER eliminar_detalles_ordenes
AFTER DELETE ON ordenes
FOR EACH ROW
BEGIN
DELETE FROM detalles_ordenes WHERE orden_id = [Link];
END;
Ejemplo 3: Trigger para aplicar una regla de negocio
Supongamos que queremos restringir la actualización de un campo estado en la tabla pedidos
para que solo se pueda cambiar de 'pendiente' a 'completado'.
CREATE TRIGGER validar_estado_pedido
BEFORE UPDATE ON pedidos
FOR EACH ROW
BEGIN
IF [Link] = 'pendiente' AND [Link] != 'completado' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No se puede cambiar el estado del pedido.';
END IF;
END;