En bases de datos bien diseñadas, no todo depende de las consultas.
Existen mecanismos internos que permiten automatizar tareas repetitivas y ejecutar lógica de negocio directamente dentro del servidor.
En este artículo aprenderás a dominar dos de las herramientas más poderosas en SQL:
los triggers (disparadores) y los procedimientos almacenados (stored procedures).
Ambos te ayudarán a mantener tus datos consistentes, reducir errores y aumentar la eficiencia de tus aplicaciones.
¿Qué es un Trigger?
Un trigger es un bloque de código SQL que se ejecuta automáticamente cuando ocurre un evento específico sobre una tabla, como una inserción (INSERT), actualización (UPDATE) o eliminación (DELETE).
Esto lo hace ideal para:
- Mantener auditorías automáticas
- Validar datos antes de que se guarden
- Actualizar o sincronizar información entre tablas relacionadas
Ejemplo práctico (PostgreSQL)
Supongamos que tenemos una tabla empleados y queremos registrar en otra tabla cada vez que un empleado sea agregado o eliminado.
CREATE TABLE empleados (
empleado_id SERIAL PRIMARY KEY,
nombre TEXT,
puesto TEXT
);
CREATE TABLE log_empleados (
log_id SERIAL PRIMARY KEY,
empleado_id INT,
accion TEXT,
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
); Ahora, creamos la función que actuará como trigger:
CREATE OR REPLACE FUNCTION registrar_cambio_empleado()
RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO log_empleados (empleado_id, accion)
VALUES (NEW.empleado_id, 'INSERT');
ELSIF TG_OP = 'DELETE' THEN
INSERT INTO log_empleados (empleado_id, accion)
VALUES (OLD.empleado_id, 'DELETE');
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql; Y luego el trigger que usa esa función:
CREATE TRIGGER trg_empleados_log
AFTER INSERT OR DELETE ON empleados
FOR EACH ROW
EXECUTE FUNCTION registrar_cambio_empleado(); ✅ Prueba en db-fiddle.com (selecciona PostgreSQL como motor)
Agrega o elimina empleados y verás cómo se llena el log_empleados automáticamente.
¿Qué es un Procedimiento Almacenado?
Un procedimiento almacenado es un bloque de código SQL precompilado que puedes ejecutar a demanda.
A diferencia de un trigger, no se ejecuta automáticamente, sino cuando tú lo llamas explícitamente.
Se usan para:
- Ejecutar varias operaciones en secuencia
- Aplicar reglas de negocio
- Reutilizar lógica SQL compleja
Ejemplo de procedimiento almacenado
Queremos un procedimiento que inserte un nuevo empleado y registre automáticamente la acción en el log.
CREATE OR REPLACE PROCEDURE agregar_empleado(_nombre TEXT, _puesto TEXT)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO empleados (nombre, puesto)
VALUES (_nombre, _puesto);
INSERT INTO log_empleados (empleado_id, accion)
VALUES (currval(pg_get_serial_sequence('empleados', 'empleado_id')), 'INSERT');
END;
$$; Y para ejecutarlo:
CALL agregar_empleado('Laura Méndez', 'Analista de datos'); Buenas prácticas
- Usa triggers solo para lógica realmente automática (por ejemplo, auditoría o control de integridad).
- No abuses de los procedimientos para tareas simples que podrían resolverse con una sola consulta.
- En PostgreSQL usa
plpgsql; en SQL Server,T-SQL; en MySQL,SQL/PSM. - Documenta siempre tus triggers y procedimientos, ya que pueden ejecutarse de forma “invisible”.
Conclusión
Los triggers y procedimientos almacenados son las herramientas que dan “vida” a una base de datos.
Con ellos, SQL pasa de ser un lenguaje de consulta a un motor de automatización y control.