0Pricing
SQL Academy · Lezione

Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW

Comprenda la temporizzazione e la granularità dei trigger (riga o istruzione) e il significato di NEW e OLD all’interno di una funzione trigger.

Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Che cos'è un trigger

Un trigger è una funzione che il database richiama automaticamente prima o dopo un INSERT, UPDATE, DELETE o TRUNCATE su una tabella.

Due componenti: funzione + trigger

Si scrive una funzione che restituisce trigger, quindi la si associa a una tabella:

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 e AFTER

  • BEFORE — viene attivato prima della scrittura della riga; può modificare NEW
  • AFTER — viene attivato dopo la scrittura; serve per gli effetti collaterali (audit, notifiche)

FOR EACH ROW e FOR EACH STATEMENT

  • FOR EACH ROW — viene eseguito una volta per ogni riga interessata; sono disponibili NEW e OLD
  • FOR EACH STATEMENT — viene eseguito una volta per istruzione, senza accesso alle singole righe

NEW e OLD

All'interno di un trigger di riga:

  • NEW — la nuova riga (INSERT, UPDATE)
  • OLD — la riga precedente (UPDATE, DELETE)

Il valore restituito è importante

Per i trigger di riga BEFORE:

  • Restituire NEW per procedere con quella riga
  • Restituire NEW modificato per cambiare ciò che viene memorizzato
  • Restituire NULL per annullare l'operazione per quella riga

Filtro WHEN

Attivazione condizionale:

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 può essere attivato solo quando cambiano colonne specifiche:

CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...

Più trigger

I trigger vengono attivati in ordine alfabetico in base al nome del trigger. Utilizzare prefissi (00_, 10_, ...) per controllare l'ordine.

Prestazioni dei trigger

I trigger di riga vengono attivati per ogni riga: una logica complessa all'interno di un trigger di riga × un DML di grandi dimensioni = lentezza. Preferire i trigger di istruzione per gli effetti collaterali di massa.

Disabilitare i trigger

Ignorarli temporaneamente:

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;

Ricorsione dei trigger

Un UPDATE eseguito da un trigger sulla stessa tabella attiva nuovamente il trigger. Utilizzare protezioni (pg_trigger_depth()) o progettare con attenzione.

Riepilogo

I trigger automatizzano le reazioni per riga.

  • Funzione che restituisce TRIGGER + CREATE TRIGGER
  • BEFORE per modificare, AFTER per gli effetti collaterali
  • NEW/OLD per accedere alle righe
  • WHEN e OF column per una selezione più mirata

Verifica rapida

Si desidera aggiornare automaticamente una colonna updated_at a ogni modifica di una riga. Quale configurazione del trigger occorre utilizzare?

Domande Frequenti

La lezione «Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW» è gratuita?

Sì — il testo completo di «Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW»?

Comprenda la temporizzazione e la granularità dei trigger (riga o istruzione) e il significato di NEW e OLD all’interno di una funzione trigger. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Anatomia dei trigger: BEFORE/AFTER, FOR EACH ROW
  2. Nozioni fondamentali sulle funzioni PL/pgSQL
  3. Blocchi DO e codice anonimo
  4. Audit delle tabelle con i trigger
← Torna a SQL Academy