MySQL ON DELETE CASCADE

Zusammenfassung: In diesem Tutorium lernen Sie, wie Sie die MySQL ON DELETE CASCADE referentielle Aktion für einen Fremdschlüssel verwenden, um Daten aus mehreren Bezugstabellen zu löschen.

Im vorherigen Tutorium haben Sie gelernt, wie Sie Daten aus mehreren Bezugstabellen mit einer einzigen DELETE-Anweisung löschen. MySQL bietet jedoch eine effektivere Methode, die ON DELETE CASCADE referentielle Aktion für einen Fremdschlüssel genannt wird, die es Ihnen ermöglicht, Daten aus untergeordneten Tabellen automatisch zu löschen, wenn Sie die Daten aus der übergeordneten Tabelle löschen.

MySQL ON DELETE CASCADE Beispiel

Lassen Sie uns einen Blick auf ein Beispiel für die Verwendung von MySQL ON DELETE CASCADE werfen.

Angenommen, wir haben zwei Tabellen:buildings und rooms . In diesem Datenbankmodell hat jedes Gebäude einen oder mehrere Räume. Jeder Raum gehört jedoch nur zu einem Gebäude. Ein Raum würde ohne ein Gebäude nicht existieren.

Die Beziehung zwischen den Tabellen buildings und rooms ist eins-zu-viele (1:N), wie im folgenden Datenbankdiagramm dargestellt:

Wenn Sie eine Zeile aus der Tabelle buildings löschen, möchten Sie auch alle Zeilen in der Tabelle rooms löschen, die auf die Zeile in der Tabelle buildings verweisen. Wenn Sie z. B. eine Zeile mit der Gebäude-Nr. 2 in der Tabelle buildings mit der folgenden Abfrage löschen:

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

Sie möchten auch, dass die Zeilen in der Tabelle rooms, die sich auf die Gebäudenummer 2 beziehen, ebenfalls entfernt werden.

Nachfolgend finden Sie Schritte, die zeigen, wie die referenzielle Aktion ON DELETE CASCADE funktioniert.

Schritt 1. Erstellen Sie die Tabelle buildings:

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

Schritt 2. Erstellen Sie die Tabelle rooms:

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

Achten Sie auf die ON DELETE CASCADE-Klausel am Ende der Definition der Fremdschlüssel-Beschränkung.

Schritt 3. Fügen Sie Zeilen in die Tabelle buildings ein:

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

Schritt 4. Abfrage von Daten aus der Tabelle buildings:

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

Wir haben zwei Zeilen in der Tabelle buildings.

Schritt 5. Zeilen in die Tabelle rooms einfügen:

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

Schritt 6. Daten aus der Tabelle rooms abfragen:

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

Wir haben drei Räume, die zum Gebäude Nr. 1 gehören und zwei Räume, die zum Gebäude Nr. 2 gehören.

Schritt 7. Lösche das Gebäude mit der Gebäude-Nr. 2:

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

Schritt 8. Daten aus der Tabelle rooms abfragen:

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

Wie Sie sehen können, wurden alle Zeilen, die auf building_no 2 verweisen, automatisch gelöscht.

Beachten Sie, dass ON DELETE CASCADE nur mit Tabellen mit Speichermotoren funktioniert, die Fremdschlüssel unterstützen, z.B., InnoDB.

Einige Tabellentypen unterstützen keine Fremdschlüssel, wie z.B. MyISAM, daher sollten Sie geeignete Speicher-Engines für die Tabellen wählen, für die Sie die MySQL ON DELETE CASCADE referentielle Aktion verwenden wollen.

Tipps zum Auffinden von Tabellen, die von der MySQL ON DELETE CASCADE Aktion betroffen sind

Manchmal ist es nützlich zu wissen, welche Tabelle von der ON DELETE CASCADE referentiellen Aktion betroffen ist, wenn Sie Daten aus einer Tabelle löschen. Sie können diese Daten aus der referential_constraints in der information_schema-Datenbank wie folgt abfragen:

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

Um beispielsweise Tabellen zu finden, die mit der buildings-Tabelle mit der CASCADE-Löschregel in der classicmodels-Datenbank verbunden sind, verwenden Sie die folgende Abfrage:

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.