MySQL ON DELETE CASCADE

Summary: I denne vejledning lærer du, hvordan du bruger MySQL ON DELETE CASCADE referentiel handling for en fremmed nøgle til at slette data fra flere relaterede tabeller.

I den foregående vejledning lærte du, hvordan du sletter data fra flere relaterede tabeller ved hjælp af en enkelt DELETE erklæring. MySQL tilbyder dog en mere effektiv måde kaldet ON DELETE CASCADE referentiel handling for en fremmed nøgle, som giver dig mulighed for at slette data fra underordnede tabeller automatisk, når du sletter data fra den overordnede tabel.

MySQL ON DELETE CASCADE eksempel

Lad os tage et kig på et eksempel på brug af MySQL ON DELETE CASCADE .

Sæt, at vi har to tabeller: buildings og rooms . I denne databasemodel har hver bygning et eller flere rum. Hvert rum hører dog kun til én bygning. Et rum ville ikke eksistere uden en bygning.

Forholdet mellem tabellerne buildings og rooms er en-til-mange (1:N) som illustreret i følgende databasediagram:

Når du sletter en række fra tabellen buildings, vil du også slette alle rækker i tabellen rooms, der henviser til rækken i tabellen buildings. Når du f.eks. sletter en række med bygningsnr. 2 i buildings-tabellen som følgende forespørgsel:

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

Du ønsker også, at de rækker i rooms-tabellen, der henviser til bygningsnummer 2, også skal fjernes.

Det følgende er trin, der viser, hvordan ON DELETE CASCADE-referencehandlingen fungerer.

Strin 1. Opret tabellen buildings:

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

Stræk 2. Opret tabellen rooms:

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

Bemærk, at ON DELETE CASCADE-klausulen i slutningen af definitionen af den fremmede nøglebegrænsning.

Stræk 3. Indsæt rækker i buildings-tabellen:

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

Stræk 4. Søg data fra buildings-tabellen:

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

Vi har to rækker i buildings-tabellen.

Stræk 5. Indsæt rækker i tabellen rooms:

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

Stræk 6. Søg data fra tabellen rooms:

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

Vi har tre værelser, der hører til bygning nr. 1, og to værelser, der hører til bygning nr. 2.

Stræk 7. Slet bygningen med bygningsnr. 2:

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

Stræk 8. Søg data fra tabellen rooms:

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

Som du kan se, blev alle de rækker, der refererer til building_no 2, automatisk slettet.

Bemærk, at ON DELETE CASCADE kun fungerer med tabeller med lagringsmotorer, der understøtter fremmednøgler, f.eks, InnoDB.

Nogle tabeltyper understøtter ikke fremmednøgler, f.eks. MyISAM, så du bør vælge passende lagringsmotorer til de tabeller, som du planlægger at bruge MySQL ON DELETE CASCADE referentiel handling.

Tips til at finde tabeller, der påvirkes af MySQL ON DELETE CASCADE handling

I nogle tilfælde er det nyttigt at vide, hvilken tabel der er påvirket af ON DELETE CASCADE referentiel handling, når du sletter data fra en tabel. Du kan forespørge på disse data fra referential_constraints i information_schema-databasen på følgende måde:

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

For eksempel kan du bruge følgende forespørgsel for at finde tabeller, der er forbundet med buildings-tabellen med CASCADE-sletningsreglen i classicmodels-databasen:

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.