MySQL ON DELETE CASCADE

Sommario: in questo tutorial, imparerai come usare MySQL ON DELETE CASCADE azione referenziale per una chiave esterna per cancellare i dati da più tabelle correlate.

Nel tutorial precedente, hai imparato come cancellare i dati da più tabelle correlate usando una singola istruzione DELETE. Tuttavia, MySQL fornisce un modo più efficace chiamato ON DELETE CASCADE azione referenziale per una chiave esterna che permette di eliminare i dati dalle tabelle figlie automaticamente quando si eliminano i dati dalla tabella madre.

MySQL ON DELETE CASCADE esempio

Diamo un’occhiata a un esempio di utilizzo di MySQL ON DELETE CASCADE .

Supponiamo di avere due tabelle:buildings e rooms . In questo modello di database, ogni edificio ha una o molte stanze. Tuttavia, ogni stanza appartiene ad un solo edificio. Una stanza non esisterebbe senza un edificio.

La relazione tra le tabelle buildings e rooms è uno-a-molti (1:N) come illustrato nel seguente diagramma del database:

Quando cancelli una riga dalla tabella buildings, vuoi anche cancellare tutte le righe nella tabella rooms che fanno riferimento alla riga nella tabella buildings. Per esempio, quando cancellate una riga con l’edificio no. 2 nella tabella buildings come la seguente query:

Code language: SQL (Structured Query Language) (sql)

Vuoi anche che le righe nella tabella rooms che si riferiscono all’edificio numero 2 vengano rimosse.

I seguenti passi dimostrano come funziona l’azione referenziale ON DELETE CASCADE.

Passo 1. Creare la tabella buildings:

Code language: SQL (Structured Query Language) (sql)

Passo 2. Creare la tabella rooms:

Code language: SQL (Structured Query Language) (sql)

Nota che la clausola ON DELETE CASCADE alla fine della definizione del vincolo di chiave esterna.

Passo 3. Inserire righe nella tabella buildings:

Code language: SQL (Structured Query Language) (sql)

Passo 4. Interrogare i dati della tabella buildings:

Code language: SQL (Structured Query Language) (sql)

Abbiamo due righe nella tabella buildings.

Step 5. Inserire le righe nella tabella rooms:

Code language: SQL (Structured Query Language) (sql)

Passo 6. Interrogare i dati della tabella rooms:

Code language: SQL (Structured Query Language) (sql)

Abbiamo tre stanze che appartengono all’edificio n. 1 e due stanze che appartengono all’edificio n. 2.

Step 7. Cancellare l’edificio con l’edificio no. 2:

Code language: SQL (Structured Query Language) (sql)

Passo 8. Interroga i dati dalla tabella rooms:

Code language: SQL (Structured Query Language) (sql)

Come puoi vedere, tutte le righe che fanno riferimento a building_no 2 sono state automaticamente cancellate.

Nota che ON DELETE CASCADE funziona solo con le tabelle con i motori di archiviazione che supportano le chiavi esterne, per esempio, InnoDB.

Alcuni tipi di tabelle non supportano le chiavi esterne come MyISAM, quindi dovresti scegliere i motori di archiviazione appropriati per le tabelle che intendi utilizzare l’azione referenziale ON DELETE CASCADE di MySQL.

Suggerimenti per trovare le tabelle interessate dall’azione ON DELETE CASCADE di MySQL

A volte, è utile sapere quale tabella è interessata dall’azione referenziale ON DELETE CASCADE quando elimini i dati da una tabella. Puoi interrogare questi dati dal referential_constraints nel database information_schema come segue:

Code language: SQL (Structured Query Language) (sql)

Per esempio, per trovare le tabelle associate alla tabella buildings con la regola di cancellazione CASCADE nel database classicmodels, usi la seguente query:

Code language: SQL (Structured Query Language) (sql)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.