ᛉ
  • ✦ desarrollo_y_software
    • ✦ bases_de_datos
      • ✦ fundamentos
        • 📄 Apuntes de triggers
      • ⟡ practicas_academicas
        • 📄 Resolviendo un ejercicio
        • 📄 trigger
  • ⟡ infraestructura
    • ✦ linux
      • ✦ fundamentos
        • 📄 01_comandos_basicos_nivel_1
        • 📄 02_standard_streams_y_redireccion
        • 📄 03_busquedas
      • ⟡ micro_labs
        • 📄 lab_01_navegacion_y_manipulacion
        • 📄 lab_021_fontaneria_de_datos
        • 📄 lab_02_fontaneria_de_datos
Descender a la Tierra
✦ Tipo: Borrador Oscuro
✧ Estado: En Forja
✥ Materia: base de datos
🏷 Runas: #database
ᛞ

Triggers

Que es un trigger?

Un trigger o disparador es un fragmento de codigo que se ejecuta en la base de datos, cuando un evente susede sobre una tabla, este fragmento una vez que detecta el evento se ejecuta automaticamente.

Escenarios para que se activen (eventos)

Escenarios DML

Lenguaje de Manipulación de Datos, es decir cuando algun registro de una tabla tiene algun evento de estos:

  • INSERT cuando alguien agrega datos a una tabla
  • DELETE cuando alguien elimina datos de una tabla
  • UPDATE cuando alguien actualiza datos de una tabla

Escenarios DDL

Lenguaje de Definición de Datos, es decir cuando la tabla es la que tiene uno de estos eventos:

  • CREATE cuando alguien crea una tabla.
  • ALTER cuando alguien altera o modifica una tabla.
  • DROP cuando alguien elimina una tabla.

Escenarios de sistema

son los eventos globales ya sea a nivel de sistema o a nivel de eschema

  • LOGGON cuando alguien inicia sesion a la base de datos.
  • LOGOFF cuando alguien cierra sesion de la base de datos.
  • STARTUP cuando la base de datos se inicia.
  • SHUTDOWN cuando la base de datos se cierra.
  • SERVERERROR cuando ocurre un error en la base de datos o servidor.

El factor del tiempo (Cuándo se ejecuta):

  • AFTER que significa despues, es decir el trigger se ejecuta después del evento.
  • BEFORE que significa antes, es decir el trigger se ejecuta antes del evento.
  • INSTEAD OF que significa en lugar de, es decir el trigger se ejecuta en lugar del evento y el evento es desechado.

Granularidad de un trigger:

  • FOR EACH ROW significa por cada fila, es decir el trigger se ejecuta por cada fila afectada por el evento, lo malo es que puede ser lento.
  • FOR EACH STATEMENT significa por cada sentencia, es decir el trigger se ejecuta una sola vez por cada sentencia que afecte a la tabla, es rapido pero no se puede acceder a los datos afectados por el evento.

Punteros de estado

son punteros que existen en el trigger dependiendo del evento que se haya dado.

  • Old viejo antigua, se refiero al dato antes de algun evento.
  • New nuevo reciente, se refiero al dato después de algun evento.
EventoOldNew
INSERTno existeexiste
UPDATEexisteexiste
DELETEexisteno existe

Sintaxis básica de un trigger

CREATE TRIGGER nombre_del_trigger
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
ON nombre_de_la_tabla
[FOR EACH ROW] -- Opcional según el motor y el tipo de trigger
[WHEN (condición)] -- Filtro opcional para optimizar
BEGIN
    -- Bloque de lógica (IF/ELSE, INSERTs, actualizaciones, etc.)
    -- Aquí utilizas los punteros NEW y OLD
END;

En Postgres la sintaxis cambia un poco, a llamar a una funcion antes de ejecutar el trigger

CREATE OR REPLACE FUNCTION nombre_funcion()
RETURNS TRIGGER AS $$
BEGIN
    -- Lógica
    RETURN NEW; -- o OLD según el caso
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER nombre_trigger
BEFORE/AFTER INSERT/UPDATE/DELETE
ON nombre_tabla
FOR EACH ROW
EXECUTE FUNCTION nombre_funcion();

📝 Apuntes bajo CC BY 4.0 por Jhoel Villca.