Articles

Cosa sono i Triggers in SQL e come implementarli?

Un trigger in SQL è un codice procedurale che viene eseguito automaticamente in risposta a certi eventi su una specifica tabella. È importante capire come questi piccoli codici facciano una così grande differenza nelle prestazioni del database. In questo articolo, imparerete come implementare i trigger con degli esempi.

In questo articolo verranno trattati i seguenti argomenti:

  • Che cos’è un Trigger?
  • Sintassi ed esempi
  • Operazioni nei trigger
  • Vantaggi e svantaggi

Cosa è un Trigger?

I Trigger sono i codici SQL che vengono eseguiti automaticamente in risposta a determinati eventi su una particolare tabella. Sono usati per mantenere l’integrità dei dati. Un trigger in SQL funziona in modo simile a un trigger del mondo reale. Per esempio, quando viene premuto il grilletto della pistola viene sparato un proiettile. Lo sappiamo tutti, ma come questo è collegato ai trigger in SQL? Per capirlo consideriamo una situazione ipotetica.

John è il responsabile marketing di un’azienda. Quando i dati di un nuovo cliente vengono inseriti nel database dell’azienda, egli deve inviare il messaggio di benvenuto ad ogni nuovo cliente. Se si tratta di uno o due clienti John può farlo manualmente, ma cosa succede se il numero è più di mille? Beh, in questo scenario i trigger sono utili.

Così, ora John può facilmente creare un trigger che invierà automaticamente un’email di benvenuto ai nuovi clienti una volta che i loro dati sono inseriti nel database. Quindi spero che vi sia chiara l’introduzione dei trigger in SQL.

Ricordate sempre che non ci possono essere due trigger con tempi di azione ed eventi simili per una tabella. Per esempio, non possiamo avere due trigger BEFORE UPDATE per una tabella. Ma possiamo avere un BEFORE UPDATE e un BEFORE INSERT trigger, o un BEFORE UPDATE e un AFTER UPDATE trigger.

Prima di immergerci ulteriormente nei fondamenti dei trigger vi suggerirei di capire i concetti di SQL Basics e Normalization così da avere una migliore presa sui trigger in SQL.

Sintassi ed esempi

Diamo ora un’occhiata alla sintassi di un trigger.

Create Trigger Trigger_Name(Before | After) on 

Ora lasciatemi scomporre questa sintassi e spiegare ogni parte in dettaglio.

  • Crea Trigger
    Queste due parole chiave sono usate per specificare che un blocco trigger sta per essere dichiarato.
  • Trigger_Name
    Specifica il nome del trigger. Il nome del trigger deve essere unico e non deve ripetersi.
  • ( Before | After )
    Questo specifica quando il trigger sarà eseguito. Ci dice il momento in cui il trigger viene avviato, cioè, o prima dell’evento in corso o dopo.

  • Prima i trigger sono usati per aggiornare o validare i valori dei record prima che siano salvati nel database.
  • I Trigger dopo sono usati per accedere ai valori dei campi che sono impostati dal sistema e per effettuare cambiamenti in altri record. I record che attivano l’after trigger sono di sola lettura. Non possiamo usare After trigger se vogliamo aggiornare un record perché porterà ad un errore di sola lettura.
  • Queste sono le operazioni DML e possiamo usarle entrambe in un dato trigger.
  • on
    Dobbiamo menzionare il nome della tabella su cui viene applicato il trigger. Non dimenticate di usare la parola chiave on e assicuratevi anche che la tabella selezionata sia presente nel database.
    1. Il trigger a livello di riga viene eseguito prima o dopo che qualsiasi valore di colonna di una riga cambia
    2. Il trigger a livello di colonna viene eseguito prima o dopo che la colonna specificata cambia

  • Si tratta di query che devono essere eseguite quando il trigger viene chiamato.

Quindi questo era tutto su un semplice trigger. Ma possiamo anche creare un trigger annidato che può fare multi-processo. Anche gestirlo e terminarlo al momento giusto è molto importante. Se non terminiamo il trigger correttamente può portare ad un loop infinito.

Vi starete chiedendo in quale scenario possiamo usare il trigger annidato. Piuttosto che darvi una risposta su misura, lasciate che condivida con voi uno scenario che vi aiuterà a capire meglio il trigger annidato. Continuando dallo scenario precedente, John ha inviato un’email per ogni nuovo cliente che è stato aggiunto al database dell’azienda. Ora, cosa succede se vuole tenere traccia del numero di clienti a cui è stata inviata l’email? Ora John ha bisogno di creare un trigger annidato per tenere traccia del conteggio insieme all’invio dell’email.

Quindi questo era tutto sulla sintassi dei trigger, proviamo ora ad implementare un esempio di trigger in SQL.

Esempio di trigger:

Nel seguente trigger, stiamo cercando di calcolare la percentuale dello studente non appena i suoi dati vengono aggiornati nel database.

CREATE TRIGGER sample_triggerbefore INSERTON studentFOR EACH ROWSET new.total = new.marks/6;

Qui la parola chiave “NEW” si riferisce alla riga che viene interessata.

Operazioni nei trigger

Possiamo eseguire molte operazioni usando i trigger. Alcune possono essere semplici e altre un po’ complesse, ma una volta che passiamo attraverso la query è facile da capire.

  • DROP A Trigger
DROP TRIGGER trigger name;
  • Display A Trigger

Il codice sottostante mostrerà tutti i trigger che sono presenti.

SHOW TRIGGERS;

Il codice seguente mostrerà tutti i trigger che sono presenti in un particolare database.

SHOW TRIGGERSIN database_name;

Esempio:

SHOW TRIGGERS IN edureka;

Nell’esempio precedente, verranno visualizzati tutti i trigger presenti nel database chiamato Edureka.

Guardiamo anche alcune varianti principali dei trigger cioè Before insert e After insert. Abbiamo già visto un trigger nell’esempio. Ma con l’aiuto della tabella vediamo come funziona esattamente.

Come abbiamo già capito come creare un trigger, ora cerchiamo di capire le due varianti del trigger che sono Before insert e After insert. per implementarle, creiamo una tabella studenti con varie colonne come mostrato qui sotto:

Ora se eseguiamo questa query otteniamo la seguente tabella.

Proviamoci ad usare la prima variante cioè Before Insert

CREATE TRIGGER calculatebefore INSERT ON studentFOR EACH ROWSET new.marks = new.marks+100;

Qui quando inseriamo i dati nella tabella studenti automaticamente viene invocato il trigger. Il trigger aggiungerà 100 alla colonna dei voti nella colonna degli studenti.

Ora usiamo la seconda variante, dopo l’inserimento

Per usare questa variante abbiamo bisogno di un’altra tabella, Percentage, dove il trigger memorizzerà i risultati. Usate il codice seguente per creare la tabella Percentage.

create table Final_mark(per int );

Ora usiamo il trigger after insert

CREATE TRIGGER total_markafter insert ON studentFOR EACH ROWinsert into Final_mark values(new.marks);

Qui quando inseriamo i dati nella tabella, il trigger total_mark memorizza il risultato nella tabella Final_mark.

Questo era tutto sul funzionamento dei trigger, ora andiamo avanti e guardiamo i suoi vantaggi e svantaggi.

Vantaggi e svantaggi dei trigger

Vantaggi

  • Forzare le approvazioni di sicurezza sulla tabella che sono presenti nel database
  • I trigger forniscono un altro modo per controllare l’integrità dei dati
  • Contrastare gli scambi non validi
  • I trigger gestiscono gli errori dal livello del database
  • Normalmente i trigger possono essere utili per controllare le modifiche dei dati nelle tabelle
  • I trigger danno un modo alternativo per eseguire attività programmate. Usando i trigger, non dobbiamo aspettare l’esecuzione degli eventi pianificati perché i trigger vengono invocati automaticamente prima o dopo un cambiamento dei dati in una tabella

Svantaggi

  • I trigger possono fornire solo validazioni estese, cioè non tutte le validazioni di tipo. Per le convalide semplici, potete usare i vincoli NOT NULL, UNIQUE, CHECK e FOREIGN KEY
  • I Trigger possono aumentare l’overhead del database
  • I Trigger possono essere difficili da risolvere perché vengono eseguiti automaticamente nel database, il che potrebbe non essere invisibile alle applicazioni client

Questo ci porta alla fine di questo articolo sui Trigger in SQL. Spero che abbiate capito i concetti di Triggers.

Se volete saperne di più su MySQL e conoscere questo database relazionale open-source, allora date un’occhiata al nostro corso di certificazione MySQL DBA, che comprende una formazione dal vivo con istruttore e un’esperienza di progetto reale. Questa formazione vi aiuterà a capire MySQL in profondità e a raggiungere la padronanza della materia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *