mySql DELETE ON CASCADE [myIsam]

MySql e’ leggero e velocissimo ma anche delle gran scomodita’: quella di non gestire le relationship e le references con l’engine MyIsam. Inoltre non si possono fare ne’ trigger(nelle versioni nuove si mi sa), ne’ transazioni! 🙁 Infatti se si ha l’esigenza di cancellare dei record relazionati a un’altra tabella in maniera automatica quando si elimina il record padre non lo si puo’ fare!
Fortunatamente dalla versione 4 o 3 non mi ricordo gestisce almento il delete multitabella quindi date 2 tabelle

tab1 (id,desc)

tab2(id,idfk,desc)

Se voglio cancellare in unica query un record tab1 e tutti i records che relazionati dentro tab2 non devo fare altro che lanciare questa query:

DELETE tab1.*,tab2.* FROM tab1 LEFT JOIN tab2 ON  tab1.id=tab2.idfk WHERE tab1.id = 1

Uso il left join, perche’ presumo che se non ha figli non verrebbe cancellato, ma questa cosa non l’ho testata.

Un alternativa a questo abominio e’ quella di usare l’engine innoDb che a differenza del myIsam gestisce l’ ON DELETE CASCADE, ON UPDATE CASCADE e protegge i dati con l’integrita’ referenziale… tuttavia mySql diventa un po’ piu’ pesante e i servizi hosting non sempre danno la possibilita’ di utilizzare le innoDb.

L'articolo ti è stato utile?

Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!