Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW
Comprenda el momento de ejecución y la granularidad de los triggers (por fila frente a por sentencia), así como el significado de NEW y OLD dentro de una función de trigger.
Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Qué es un trigger
Un trigger es una función que la base de datos llama automáticamente antes o después de un INSERT, UPDATE, DELETE o TRUNCATE en una tabla.
Dos piezas: función + trigger
Escriba una función que devuelva trigger y después asígnela a una tabla:
CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at := NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();BEFORE frente a AFTER
- BEFORE — se activa antes de escribir la fila; puede modificar NEW
- AFTER — se activa después de la escritura; se utiliza para efectos secundarios (auditoría, notificaciones)
FOR EACH ROW frente a FOR EACH STATEMENT
- FOR EACH ROW — se ejecuta una vez por cada fila afectada;
NEWyOLDestán disponibles - FOR EACH STATEMENT — se ejecuta una vez por instrucción, sin acceso individual a las filas
NEW y OLD
Dentro de un trigger de fila:
NEW— la fila nueva (INSERT, UPDATE)OLD— la fila anterior (UPDATE, DELETE)
El valor de retorno es importante
Para triggers de fila BEFORE:
- Devuelva
NEWpara continuar con esa fila - Devuelva un
NEWmodificado para cambiar lo que se almacena - Devuelva
NULLpara cancelar la operación de esa fila
Filtro WHEN
Activación condicional:
CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();OF column
BEFORE/AFTER UPDATE puede activarse solo cuando cambian columnas específicas:
CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...Varios triggers
Los triggers se activan en orden alfabético según su nombre. Utilice prefijos (00_, 10_, ...) para controlar el orden.
Rendimiento de los triggers
Los triggers de fila se activan para cada fila: lógica pesada dentro de un trigger de fila × DML grande = lentitud. Prefiera triggers de instrucción para efectos secundarios de operaciones masivas.
Deshabilitar triggers
Omitirlos temporalmente:
ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;
-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;Recursión de triggers
Un UPDATE del trigger en la misma tabla vuelve a activar el trigger. Utilice protecciones (pg_trigger_depth()) o diseñe la solución con cuidado.
Resumen
Los triggers automatizan las reacciones por fila.
- Función que devuelve TRIGGER + CREATE TRIGGER
- BEFORE para modificar, AFTER para efectos secundarios
- NEW/OLD para acceder a las filas
- WHEN y OF column para seleccionar mejor los casos
Comprobación rápida
Desea actualizar automáticamente una columna updated_at cada vez que cambie una fila. ¿Qué configuración de trigger debe utilizar?
Preguntas frecuentes
¿La lección «Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW» es gratis?
Sí — el texto completo de «Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW»?
Comprenda el momento de ejecución y la granularidad de los triggers (por fila frente a por sentencia), así como el significado de NEW y OLD dentro de una función de trigger. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Anatomía de los triggers: BEFORE/AFTER, FOR EACH ROW
- Conceptos básicos de las funciones PL/pgSQL
- Bloques DO y código anónimo
- Auditoría de tablas con triggers