MySQL ON DELETE CASCADE

Samenvatting: in deze tutorial leert u hoe u MySQL ON DELETE CASCADE referential action for a foreign key kunt gebruiken om gegevens uit meerdere gerelateerde tabellen te verwijderen.

In de vorige tutorial hebt u geleerd hoe u gegevens uit meerdere gerelateerde tabellen kunt verwijderen met een enkel DELETE statement. MySQL biedt echter een effectievere manier genaamd ON DELETE CASCADE referentiële actie voor een vreemde sleutel waarmee u automatisch gegevens uit de kindertabellen kunt verwijderen wanneer u de gegevens uit de oudertabel verwijdert.

MySQL ON DELETE CASCADE voorbeeld

Laten we eens kijken naar een voorbeeld van het gebruik van MySQL ON DELETE CASCADE .

Voorstel dat we twee tabellen hebben:buildings en rooms . In dit databasemodel heeft elk gebouw een of meer kamers. Elke kamer behoort echter tot slechts één gebouw. Een kamer zou niet bestaan zonder een gebouw.

De relatie tussen de tabellen buildings en rooms is één-op-veel (1:N), zoals wordt geïllustreerd in het volgende databasediagram:

Wanneer u een rij uit de tabel buildings verwijdert, wilt u ook alle rijen in de tabel rooms verwijderen die naar de rij in de tabel buildings verwijzen. Bijvoorbeeld, wanneer u een rij met gebouwnr. 2 in de buildings tabel als de volgende query:

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

U wilt ook de rijen in de rooms tabel die verwijst naar gebouw nummer 2 zal ook worden verwijderd.

De volgende zijn stappen die laten zien hoe de ON DELETE CASCADE referentiële actie werkt.

Stap 1. Maak de buildings tabel aan:

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

Stap 2. Maak de rooms tabel aan:

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

Merk op dat de ON DELETE CASCADE clausule aan het eind van de foreign key constraint definitie staat.

Stap 3. Voeg rijen in de tabel buildings in:

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

Stap 4. Gegevens uit de buildings tabel opvragen:

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

We hebben twee rijen in de buildings tabel.

Stap 5. Voeg rijen in de tabel rooms in:

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

Stap 6. Gegevens uit de tabel rooms opvragen:

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

We hebben drie kamers die bij gebouw nr. 1 horen en twee kamers die bij gebouw nr. 2 horen.

Stap 7. Verwijder het gebouw met gebouw nr. 2:

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

Step 8. Vraag gegevens op uit tabel rooms:

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

Zoals u kunt zien, zijn alle rijen die verwijzen naar building_no 2 automatisch verwijderd.

Merk op dat ON DELETE CASCADE alleen werkt met tabellen met de opslag engines die foreign keys ondersteunen, bijv, InnoDB.

Sommige tabel typen ondersteunen geen foreign keys zoals MyISAM dus u moet geschikte opslag engines kiezen voor de tabellen die u van plan bent om de MySQL ON DELETE CASCADE referential action te gebruiken.

Tips om tabellen te vinden die worden beïnvloed door MySQL ON DELETE CASCADE actie

Soms is het handig om te weten welke tabel wordt beïnvloed door de ON DELETE CASCADE referential action wanneer u gegevens uit een tabel verwijdert. U kunt deze gegevens als volgt opvragen bij de referential_constraints in de information_schema database:

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

Om bijvoorbeeld tabellen te vinden die zijn gekoppeld aan de buildings tabel met de CASCADE verwijderingsregel in de classicmodels database, gebruikt u de volgende query:

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.