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.
Non scappare subito via! Forse ti interessano...
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!