SMsoft – informatica e dintorni

MySQL: cancellare le tabelle con chiavi esterne (Foreign key)

Ormai anche per piccoli progetti MySQL si tende a creare relazioni tra tabelle (solo con motore InnoDB) definendo chiavi esterne.
Le Foreign key aiutano a stabilire i comportamenti che il database dovrà assumere quando si tenterà di eliminare o modificare un record di una tabella padre legato ad uno o più record nella tabella figlio. Possiamo definire in teoria cinque azioni da attivare in caso di cancellazione o modifica, anche se in pratica le azioni sono solo tre:
CASCADE – La cancellazione o modifica di un record nella tabella padre genererà la cancellazione o la modifica dei record collegati nella tabella figlia.
SET NULL -E’ possibile attivere questa azione solo se il campo interessato della tabella figlia non è impostato a NOT NULL. In caso di eliminazione o modifica di un record nella tabella padre i record collegati della tabella figlia verranno impostati a NULL.
NO ACTION o RESTRICT – Il nome di queste azioni potrebbe far pensare che il record della tabella padre venga cancellato o modificato senza ulteriori modifiche. Queste azioni invece impediscono direttamente la modifica o la cancellazione dei record della tabella padre. Praticamente specificare queste due azioni equivale a non inserire alcuna azione.
SET DEFAULT – Questa azione benché supportata dallo standard SQL genera un errore sulla definizione della tabella quindi non è utilizzabile, al momento, con MySQL.

Errore durante la cancellazione di tabelle con Foreign key

D’altra parte, le relazioni a volte non consentono la cancellazione di tutte le tabelle, proprio perché la cancellazione è bloccata da qualche chiave esterna (Foreign key).

Come fare un questo caso? Semplice, si disabilita il controllo delle relazioni prima di cancellare e poi si riabilita a cancellazione avvenuta. Le query da usare sono:

cancelliamo ora tutte le tabelle ed infine:

enjoy!




Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂

Commenti

Page optimized by WP Minify WordPress Plugin