Vai al contenuto principale

Trigger SQL: una guida per sviluppatori

Scopri come usare i trigger SQL per automatizzare attività, mantenere l’integrità dei dati e migliorare le prestazioni del database. Prova esempi pratici come i comandi CREATE, ALTER e DROP in MySQL e Oracle.
Aggiornato 3 giu 2026  · 13 min leggi

I trigger SQL sono strumenti potenti nella gestione dei database che automatizzano attività in risposta a eventi specifici. Capendo e implementando i trigger SQL, puoi garantire l’integrità dei dati, automatizzare attività ripetitive e migliorare le prestazioni complessive del database. In questo articolo troverai le nozioni fondamentali sui trigger SQL, la loro sintassi, i tipi e alcuni esempi pratici su come usarli in modo efficace.

Per approfondire SQL e la gestione dei database con un percorso strutturato, valuta il nostro career track Associate Data Analyst in SQL, che ti preparerà alla tua prossima opportunità. Offriamo anche lo skill track SQL Fundamentals con tanti esercizi pratici. Infine, se scopri di essere interessato sia ai trigger SQL sia a SQL Server, abbiamo il corso giusto: Building and Optimizing Triggers in SQL Server

Cosa sono i trigger SQL?

I trigger SQL sono stored procedure che si eseguono automaticamente in risposta a determinati eventi su una specifica tabella o vista di un database. Si usano per mantenere l’integrità dei dati, applicare regole di business e automatizzare attività. Possiamo impostare i trigger perché scattino prima o dopo un’operazione di INSERT, UPDATE o DELETE. Comprendere e implementare i trigger SQL può migliorare notevolmente le tue capacità di gestione dei database.

Sintassi e struttura dei trigger SQL

La sintassi di base di un trigger SQL include l’istruzione di creazione, l’evento che lo attiva e le istruzioni SQL che definiscono le sue azioni. Ecco un modello generale per creare un trigger. La sintassi seguente funziona in molti database comuni, come MySQL e Oracle.

CREATE TRIGGER trigger_name
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON table_name
FOR EACH ROW
BEGIN
    -- SQL statements
END;

Per illustrare, considera uno scenario in cui vuoi registrare le modifiche nella tabella employees. Potresti creare un trigger come questo:

CREATE TRIGGER log_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Questo esempio crea un trigger che registra gli aggiornamenti eseguiti sulla tabella employees inserendo i vecchi dati del dipendente in una tabella employees_log ogni volta che avviene un aggiornamento.

Operazioni con i trigger SQL

I trigger SQL consentono varie operazioni che aiutano a mantenere la coerenza dei dati e ad automatizzare i processi; tra queste, creare, modificare, eliminare e visualizzare i trigger sono operazioni essenziali. Ecco come eseguirle:

1. Creare i trigger

Creare un trigger significa definire quando deve essere eseguito e quali azioni deve compiere. L’esempio sopra mostra come creare un trigger che registra gli aggiornamenti su una tabella employees.

CREATE TRIGGER after_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'deleted');
END;

Questo trigger registra i dettagli dei record dei dipendenti eliminati nella tabella employees_log.

2.  Modificare ed eliminare i trigger

Per modificare un trigger, devi eliminare quello esistente e crearne uno nuovo con le modifiche desiderate. Ecco come fare:

DROP TRIGGER IF EXISTS log_changes;
CREATE TRIGGER log_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Eliminare un trigger è più semplice. Usa il seguente comando per rimuovere un trigger:

DROP TRIGGER IF EXISTS log_changes;

Questo garantisce che il trigger non sia più attivo e non esegua le azioni definite.

3. Visualizzare i trigger esistenti

Puoi visualizzare i trigger esistenti in un database usando query specifiche in base al tuo DBMS SQL. Per esempio, in MySQL:

SHOW TRIGGERS;

Questa query elenca tutti i trigger nel database corrente, permettendoti di rivederli e gestirli secondo necessità.

Tipi di trigger SQL

Esistono diversi tipi principali di trigger SQL. Questi tipi sono raggruppati in base agli eventi specifici a cui rispondono e alle operazioni che eseguono.

  • Trigger DML (Data Manipulation Language): includono i trigger AFTER, che si eseguono dopo un’operazione, i trigger BEFORE, che si eseguono prima di un’operazione, e i trigger INSTEAD OF, che sostituiscono l’operazione con il codice del trigger.
  • Trigger DDL (Data Definition Language): si attivano in risposta a eventi DDL come le istruzioni CREATE, ALTER e DROP. Sono utili per controllare le modifiche allo schema, eseguire audit delle modifiche al database e applicare politiche di sicurezza.
  • Trigger di accesso (Logon): in genere si eseguono in risposta a un evento LOGON. Sono tipicamente usati per controllare o monitorare le sessioni utente, applicare politiche di accesso o registrare l’attività degli utenti. Per esempio, un trigger di accesso può limitare l’accesso a determinate ore o registrare l’ora di login e l’indirizzo IP di ciascun utente.

Esempi di trigger SQL

Vediamo alcuni esempi pratici di come i trigger SQL possano automatizzare le attività. Questi esempi ti aiuteranno a capire l’implementazione e i vantaggi dell’uso dei trigger nel tuo database.

Creare un trigger di base

Supponiamo di avere una tabella employees e di voler registrare tutte le eliminazioni da questa tabella. Per prima cosa, crea le tabelle necessarie:

CREATE TABLE employees (
    employee_id INT,
    name VARCHAR(100),
    department VARCHAR(100)
);
CREATE TABLE employees_log (
    employee_id INT,
    name VARCHAR(100),
    action VARCHAR(100)
);
INSERT INTO employees (employee_id, name, department)
VALUES (1, 'Alice', 'HR'), (2, 'Bob', 'IT'), (3, 'Charlie', 'Sales'), (4, 'David', 'IT');

Poi crea il trigger per registrare le eliminazioni:

CREATE TRIGGER after_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'deleted');
END;

Questo trigger registra i dettagli del dipendente in employees_log ogni volta che un record viene eliminato.

Registrare le modifiche in una tabella

Registrare le modifiche a una tabella è importante per l’audit e per mantenere uno storico delle modifiche ai dati. Possiamo estendere l’esempio precedente per registrare anche gli aggiornamenti:

CREATE TRIGGER after_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (employee_id, name, action)
    VALUES (OLD.employee_id, OLD.name, 'updated');
END;

Questo trigger garantisce che ogni aggiornamento della tabella employee venga registrato nella tabella employees_log. Catturando queste informazioni, puoi tracciare le modifiche nel tempo e mantenere uno storico per finalità di audit.

Aggiornare automaticamente tabelle correlate

Questo aiuta a mantenere la coerenza dei dati e a ridurre il lavoro manuale. Per esempio, quando viene effettuato un nuovo ordine, potresti voler aggiornare la data dell’ultimo ordine del cliente.

CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
  UPDATE customers
  SET last_order_date = NOW()
  WHERE id = NEW.customer_id;
END;

Questo trigger aggiorna il campo last_order_date nella tabella customers ogni volta che viene inserito un nuovo ordine nella tabella orders. In questo modo le informazioni sui clienti sono sempre aggiornate, migliorando l’accuratezza e la coerenza dei dati.

Uso delle variabili di trigger old e new

In PL/SQL, OLD e NEW sono variabili di trigger che si riferiscono rispettivamente ai valori delle colonne prima e dopo l’evento che le attiva. Queste variabili servono per accedere e manipolare i dati nei trigger. Per esempio, puoi usarle per tracciare le modifiche:

CREATE TRIGGER track_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO change_log (employee_id, old_name, new_name)
    VALUES (OLD.employee_id, OLD.name, NEW.name);
END;

Questo trigger registra i vecchi e i nuovi nomi dei dipendenti ogni volta che i loro record vengono aggiornati.

Idee avanzate sui trigger SQL

In questa sezione vedremo alcune tecniche nuove, tra cui trigger annidati, trigger ricorsivi e gestione degli errori.

Trigger annidati e casi d’uso

I trigger annidati sono trigger che attivano altri trigger. Per esempio, un trigger AFTER INSERT può causare l’attivazione di un trigger AFTER UPDATE. Pur essendo potenti, i trigger annidati possono complicare la logica e andrebbero usati con parsimonia per evitare problemi di prestazioni. Sono utili in workflow complessi in cui più azioni devono avvenire in sequenza.

Trigger ricorsivi

I trigger ricorsivi richiamano se stessi, direttamente o indirettamente, e possono portare a loop infiniti. Per esempio, un trigger AFTER UPDATE che aggiorna la stessa tabella può causare la propria attivazione ripetuta. Vanno gestiti con cautela e con adeguate condizioni per prevenire loop infiniti. I trigger ricorsivi possono essere utili in scenari come aggiornamenti o eliminazioni a cascata tra tabelle correlate, ma richiedono una progettazione attenta per evitare esecuzioni senza fine.

Gestione degli errori nei trigger

La gestione degli errori all’interno dei trigger è essenziale per mantenere l’integrità dei dati e fornire messaggi di errore significativi. L’uso di blocchi EXCEPTION nei trigger PL/SQL può aiutare a gestire gli errori in modo efficace. Una corretta gestione degli errori assicura che i problemi durante l’esecuzione dei trigger vengano intercettati e gestiti con grazia, prevenendo corruzioni dei dati o transazioni incomplete.

Best practice per usare i trigger SQL

Implementare i trigger SQL può migliorare sensibilmente le attività di gestione del database, ma è bene seguire alcune best practice per evitare impatti negativi sulle prestazioni. Ecco alcune buone pratiche da considerare quando usi i trigger SQL:

1. Mantieni i trigger semplici ed efficienti.

I trigger dovrebbero svolgere i loro compiti in modo rapido ed efficiente per evitare colli di bottiglia. Una logica complessa all’interno dei trigger può rallentare le operazioni del database, quindi è meglio mantenerli il più semplici possibile. Per esempio, evita di eseguire calcoli estesi o modifiche considerevoli ai dati all’interno di un trigger.

2. Usa i trigger per logging e audit.

I trigger sono ottimi strumenti per mantenere registri delle modifiche ai dati. Registrando automaticamente le modifiche, puoi creare una traccia di audit che aiuta a tenere sotto controllo le modifiche ai tuoi dati, particolarmente utile per la conformità normativa e il troubleshooting. Per esempio, puoi creare un trigger che registra qualsiasi operazione di update o delete su una tabella sensibile.

3. Evita logiche di business complesse nei trigger.

La logica di business può diventare rapidamente complessa e incorporarla nei trigger può rendere il database difficile da gestire e comprendere. Tieni invece la logica di business nel codice dell’applicazione o nelle stored procedure e usa i trigger per attività semplici e automatiche. Questa separazione delle responsabilità aiuta a mantenere chiarezza e gestibilità.

4. Documenta i trigger per la manutenibilità

Una documentazione adeguata è fondamentale per mantenere e comprendere i trigger, soprattutto man mano che il database cresce ed evolve. Documenta cosa fa ciascun trigger, perché esiste e qualsiasi dettaglio specifico della sua implementazione. Questa pratica assicura che altri (o anche tu, in un secondo momento) possano comprendere e mantenere efficacemente i trigger. Assicurati che i trigger svolgano i loro compiti rapidamente ed efficientemente per evitare colli di bottiglia.

5. Valuta vantaggi e svantaggi 

Come best practice, devi valutare i vantaggi e gli svantaggi dei trigger SQL quando li usi, perché ci sono compromessi da considerare.

Vantaggi 

Svantaggi

Esecuzione automatica delle attività

Possibile overhead prestazionale

Maggiore integrità dei dati

Complessità nel troubleshooting

Gestione degli errori e logging

Rischio di creare loop infiniti

6. Valuta alternative ai trigger SQL

Alternative all’uso dei trigger includono stored procedure, check constraint e foreign key. Queste alternative possono raggiungere gli stessi obiettivi dei trigger con minore complessità. Per esempio, le stored procedure possono essere chiamate esplicitamente per eseguire azioni, mentre i check constraint e le foreign key applicano l’integrità dei dati senza overhead aggiuntivo.

Conclusione

I trigger SQL sono strumenti estremamente utili che possono davvero migliorare le prestazioni del tuo database perché automatizzano attività, garantiscono l’integrità dei dati e offrono funzionalità di gestione degli errori e di logging. 

Per padroneggiare i trigger SQL e altre tecniche avanzate, ti consiglio il nostro corso Building and Optimizing Triggers in SQL Server. Una volta completato, valuta di esplorare anche il corso Reporting in SQL per imparare a creare dashboard personalizzati. Insieme, questi corsi ti daranno un ottimo set di strumenti per eccellere nella gestione dei database.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Technical writer specializzato in AI, ML e data science: rende idee complesse chiare e accessibili.

Domande frequenti sui trigger SQL

Che cos’è un trigger SQL?

Un trigger SQL è una procedura speciale in un database che si esegue automaticamente in risposta a determinati eventi, come operazioni di INSERT, UPDATE o DELETE. Garantisce l’integrità dei dati e automatizza attività.

Come si crea un trigger SQL?

Crei un trigger SQL usando l’istruzione CREATE TRIGGER, specificando l’evento che lo attiverà e il codice procedurale da eseguire.

Quali sono i diversi tipi di trigger SQL?

Ce ne sono diversi tipi, inclusi i trigger DML (AFTER, BEFORE, INSTEAD OF), i trigger DDL e i trigger di accesso (Logon). Ogni tipo si esegue in fasi diverse di un’operazione sul database.

I trigger SQL sono usati solo in sistemi di gestione di database specifici come Oracle o SQL Server?

I trigger non sono limitati a database specifici come Oracle. Sono una funzionalità disponibile in molti sistemi di gestione di database relazionali che supportano SQL.

Argomenti

Impara SQL con DataCamp

Programma

SQL per amministratori di database

16 h
Acquisisci le competenze in materia di database necessarie per diventare un DBA SQL sicuro e redditizio. Impara a creare, far crescere e gestire il tuo database PostgreSQL.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra altroMostra altro