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)