giovedì 23 maggio 2019

MYSQL: cancellare record su più tabelle con i trigger

Tempo fa avevo spiegato come utilizzare i trigger in mysql, sia da codice sql, sia utilizzando l'interfaccia grafica di phpmyadmin.
Oggi invece vediamo un esempio concreto su una delle casistiche più ricorrenti, il delete after delete.

Quando capita di dover cancellare i record presenti in delle tabelle figlie, soprattutto se si sta sviluppando una nuova applicazione e si fanno molte prove, a volte può risultare scomodo andare ad eliminare a mano tutti i record di sottotabelle per evitare di lasciare righe orfane nel database mysql.
Ed è proprio in questi casi che torna utile saper utilizzare al meglio i trigger mysql.

Vediamo subito con un esempio pratico come ripulire in automatico il nostro database.


Come cancellare automaticamente record su più tabelle con i trigger di MYSQL


La sintassi sql da utilizzare per rimuovere automaticamente da una tabella mysql tutti i record legati ad una tabella non più esistente è la seguente:

CREATE TRIGGER `nome-trigger` AFTER DELETE ON `tabella-padre` 
FOR EACH ROW 
DELETE FROM tabella-figlia WHERE tabella-figlia.id-chiave=old.id;

La sintassi sopra indicata si spiega da sola, ma vediamo comunque di andare ad analizzare cosa ho appena scritto.
Il comando sql CREATE TRIGGER serve ovviamente a creare il nostro trigger, al quale bisogna dare un nome, bisogna indicare un'azione (in questo caso dopo l'operazione di cancellazione, ovvero AFTER DELETE), e bisogna dire qual'è la tabella dalla quale parte il comando.

C'è poi una sintassi che serve per indicare che l'operazione sql che andremo a fare sarà effettuata su tutte le righe della tabella bersaglio, ovvero: FOR EACH ROW.

Infine basta indicare la sintassi mysql desiderata per compiere l'azione, in questo caso la DELETE, mettendo nel WHERE un legame tra un id chiave della tabella bersaglio, con l'id della tabella padre, indicata con la sintassi old.

Tutto molto semplice no?
Da ora in poi quindi, cancellando una riga della tabella padre, verranno rimosse in automatico dal database tutte le righe della tabella figlia che rispondono ai requisiti indicati nel nostro trigger.

Piaciuto l'articolo? Lascia un commento!

EmoticonEmoticon