Puedes ejecutar cualquier trigger en nuestra consola interactiva: Abrir consola SQL →
Triggers en SQL: automatización de eventos en la base de datos
Los triggers permiten ejecutar código automáticamente cuando ocurre un evento: INSERT, UPDATE o DELETE. Son esenciales para auditoría, validaciones y sincronización de datos.
Tabla de contenidos
1. ¿Qué es un trigger?
Un trigger es un bloque de código que se ejecuta automáticamente cuando ocurre un evento en una tabla.
2. Tipos de triggers
- AFTER — se ejecuta después del evento.
- BEFORE — se ejecuta antes del evento.
- INSTEAD OF — reemplaza el evento.
3. Trigger AFTER INSERT
CREATE TRIGGER log_insert
AFTER INSERT ON ventas
FOR EACH ROW
BEGIN
INSERT INTO auditoria (accion, fecha)
VALUES ('INSERT en ventas', NOW());
END;
4. Trigger AFTER UPDATE
CREATE TRIGGER log_update
AFTER UPDATE ON productos
FOR EACH ROW
BEGIN
INSERT INTO auditoria (accion, fecha)
VALUES ('UPDATE en productos', NOW());
END;
5. Trigger AFTER DELETE
CREATE TRIGGER log_delete
AFTER DELETE ON usuarios
FOR EACH ROW
BEGIN
INSERT INTO auditoria (accion, fecha)
VALUES ('DELETE en usuarios', NOW());
END;
6. Triggers BEFORE
CREATE TRIGGER validar_precio
BEFORE INSERT ON productos
FOR EACH ROW
BEGIN
IF NEW.precio < 0 THEN
SET NEW.precio = 0;
END IF;
END;
7. Ejemplos prácticos
-- Auditoría completa
CREATE TRIGGER auditoria_ventas
AFTER INSERT OR UPDATE OR DELETE ON ventas
FOR EACH ROW
BEGIN
INSERT INTO auditoria (tabla, fecha)
VALUES ('ventas', NOW());
END;
-- Validación de stock
CREATE TRIGGER validar_stock
BEFORE UPDATE ON productos
FOR EACH ROW
BEGIN
IF NEW.stock < 0 THEN
SET NEW.stock = 0;
END IF;
END;
8. Ejercicios para practicar
- Crea un trigger AFTER INSERT.
- Crea un trigger BEFORE UPDATE.
- Haz un trigger de auditoría.
- Valida un campo antes de insertar.
- Explica la diferencia entre AFTER y BEFORE.
CREATE TRIGGER t1 AFTER INSERT ON ventas
FOR EACH ROW INSERT INTO log VALUES ('insert');
CREATE TRIGGER t2 BEFORE UPDATE ON productos
FOR EACH ROW SET NEW.precio = ABS(NEW.precio);
CREATE TRIGGER audit AFTER DELETE ON usuarios
FOR EACH ROW INSERT INTO auditoria VALUES ('delete', NOW());
-- BEFORE valida antes; AFTER registra después.
9. Mini‑proyecto: Sistema de auditoría automática
CREATE TRIGGER auditoria_general
AFTER INSERT OR UPDATE OR DELETE ON productos
FOR EACH ROW
BEGIN
INSERT INTO auditoria (tabla, accion, fecha)
VALUES ('productos', 'cambio', NOW());
END;
10. Errores comunes
- Crear demasiados triggers.
- Usar triggers para lógica de negocio compleja.
- No documentar triggers.
- Ignorar impacto en rendimiento.
11. Preguntas frecuentes
¿Los triggers afectan el rendimiento?
Sí, especialmente si son complejos.
¿Puedo tener múltiples triggers por evento?
Sí, pero no siempre es recomendable.