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.

Pubblicità Google Adsense

Se ti è piaciuta la notizia condividila con twitter o facebook...

Nel mio template dei commenti ho rimosso il tag nofollow se vuoi puoi farlo anche tu con il plugin nofollowfree

Segui il feed rss relativo a questa notizia: sottoscrivi feed commenti


Trackback & Pingback

Se vuoi rispondere a questa notizia o usarla sul tuo spazio internet usa l'url di trackback e il tuo sito apparirà nella lista dei trackback e pingback:


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Ricevi un avviso se ci sono nuovi commenti. Oppure iscriviti senza commentare.