Grazie ai triggers quindi, è possibile eseguire del codice sql dopo o prima l'inserimento, la modifica o la cancellazione di un campo/riga di una tabella mysql.
Vediamo subito come aggiungere trigger e come modificarli.
Come creare un trigger in mysql
Quando si vuole creare un trigger mysql, la prima cosa che bisogna chiedersi è: prima o dopo?
Infatti, si avrà a che fare con queste due sintassi sql:
- BEFORE: da utilizzare se si vuole che l'azione automatica venga eseguita prima (es. prima di cancellare un record, copialo in un'altra tabella)
- AFTER: da usare se si vuole che l'automatismo giri dopo una determinata azione (es. dopo aver modificato un campo, salva i dati in un'altra tabella di log)
Adesso invece vediamo a quali comandi è possibile associare il trigger:
- INSERT: scatena il trigger prima o dopo l'inserimento di un record in una tabella mysql
- UPDATE: scatena il trigger prima/dopo l'aggiornamento di un dato
- DELETE: scatena il trigger prima/dopo la cancellazione (es. si può far bloccare la cancellazione di un record tramite un trigger che controlla una determinata condizione)
Ogni trigger che viene creato su un determinato database mysql, deve avere un nome univoco, in più va creato all'interno del comando DELIMITER.
Chiariti questi concetti base, ecco un esempio di codice sql da utilizzare per creare un trigger su mysql:
DELIMITER $$;
CREATE TRIGGER nome_trigger
AFTER INSERT ON tabella1
FOR EACH ROW
BEGIN
INSERT INTO tabella2 (idtab1,campo) VALUES (NEW.idtab1,NEW.campotab1);
END $$;
DELIMITER;
Anche se questo script potrebbe generare a video qualche errore/alert, di fatto il trigger viene creato, e tramite phpmyadmin può essere visto nell'alberatura della tabella.
Oppure lanciando il comando sql per vedere tutti i trigger esistenti:
SHOW TRIGGERS
Nell'esempio sopra indicato, ho creato un trigger che dopo l'inserimento nella tabella1, inserisce i nuovi record nella tabella2.
Il prefisso NEW serve per indicare i nuovi record inseriti/modificati, mentre il prefisso OLD viene utilizzato per pescare i record dopo una determinata azione.
Se ad esempio inserisco una nuova riga in una tabella, uso NEW.campo per pescare il nuovo record inserito, invece se si tratta di un aggiornamento, posso utilizzare OLD.campo per ottenere il valore del record prima della modifica.
Come poi dicevo poco sopra, se si sta usando phpmyadmin, se è presente qualche trigger nel database selezionato, selezionando una tabella apparirà la voce triggers, e cliccando su Nuovo / New o sul nome di un trigger già esistente, sarà possibile inserire o modificare un trigger.
Sapere come utilizzare i triggers su mysql può tornare utile per creare degli automatismi che fanno da ulteriore blocco lato database sulle tabelle, in modo da garantire maggiormente l'integrità dei dati.
Lascia un commento!