logo

MySQL ON DELETE CASCADE

Die ON DELETE CASCADE-Klausel in MySQL wird automatisch verwendet entfernen die übereinstimmenden Datensätze aus der untergeordneten Tabelle, wenn wir die Zeilen aus der übergeordneten Tabelle löschen. Es handelt sich um eine Art referenzielle Aktion im Zusammenhang mit dem Unbekannter Schlüssel .

Angenommen, wir haben zwei Tabellen mit einem FOREIGN KEY in einer Fremdschlüsselbeziehung erstellt, sodass beide Tabellen über- und untergeordnet sind. Als Nächstes definieren wir eine ON DELETE CASCADE-Klausel für einen FOREIGN KEY, die festgelegt werden muss, damit der andere bei den Kaskadenoperationen erfolgreich ist. Wenn ON DELETE CASCADE nur für eine FOREIGN KEY-Klausel definiert ist, lösen kaskadierende Vorgänge einen Fehler aus.

Beispiel für MySQL ON DELETE CASCADE

Lassen Sie uns verstehen, wie wir die ON DELETE CASCADE-Klausel in der MySQL-Tabelle verwenden können. Zuerst erstellen wir zwei Tabellen mit dem Namen Mitarbeiter und Bezahlung . Beide Tabellen sind über einen Fremdschlüssel mit einem Löschkaskadenvorgang verknüpft. Hier ist ein Mitarbeiter der übergeordnete Tabelle , und Zahlung ist die Kindertisch . Die folgenden Skripte erstellen beide Tabellen zusammen mit ihren Datensätzen.

Tabelle: Mitarbeiter

Die folgende Anweisung erstellt eine Tabelle Employee:

Zeichenfolge in Zeichen Java
 CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) ); 

Führen Sie als Nächstes die Einfügeabfrage aus, um die Datensätze zu füllen.

 INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12'); 

Führen Sie die SELECT-Abfrage aus, um die Daten in einer Tabelle zu überprüfen, die unten gezeigt werden kann:

MySQL ON DELETE CASCADE

Tabelle: Zahlung

Die folgende Anweisung erstellt eine Tabelle „Zahlung“:

 CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE ); 

Als nächstes führen Sie die aus insert-Anweisung um die Datensätze in eine Tabelle zu füllen.

 INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30'); 

Führen Sie die SELECT-Abfrage aus, um die Daten in einer Tabelle zu überprüfen, die unten gezeigt werden kann:

Bash-Arrays
MySQL ON DELETE CASCADE

Lassen Sie uns löschen Daten aus der übergeordneten Tabelle Employee. Führen Sie dazu die folgende Anweisung aus:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Die obige Anweisung löscht die Mitarbeiterdatensätze, deren emp_id = 102 Und Referenzierung Daten in die untergeordnete Tabelle. Wir können die Daten mit der SELECT-Anweisung überprüfen, die die folgende Ausgabe liefert:

MySQL ON DELETE CASCADE

In der obigen Ausgabe können wir sehen, dass alle Zeilen, die auf emp_id = 102 verweisen, automatisch aus beiden Tabellen gelöscht wurden.

Wie finde ich die betroffene Tabelle mit der Aktion ON DELETE CASCADE?

Manchmal möchten wir vor dem Löschen von Datensätzen aus der Tabelle die betroffene Tabelle durch die referenzielle Aktion ON DELETE CASCADE kennen. Wir können diese Informationen finden, indem wir die referential_constraints in der Datenbank information_schema wie folgt abfragen:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE' 

Die folgende Anweisung erzeugt das Ergebnis für die Tabellen, die mit der Employee-Tabelle mit der ON DELETE CASCADE-Regel in verknüpft sind Mitarbeiterdb Datenbank:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE'; 

Nachdem wir den obigen Befehl ausgeführt haben, erhalten wir die folgende Ausgabe:

NPM-Cache leeren
MySQL ON DELETE CASCADE

MySQL ON UPDATE CASCADE

ON UPDATE CASCADE-Klausel in MySQL wird benutzt um aktualisieren die passenden Datensätze aus der untergeordneten Tabelle automatisch, wenn wir die Zeilen in der übergeordneten Tabelle aktualisieren. Das folgende Beispiel erklärt es noch deutlicher.

Zuerst müssen wir das verwenden TABELLE ÄNDERN Anweisung, um die ON UPDATE CASCADE-Klausel in die Tabelle „Zahlung“ wie folgt einzufügen:

 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Es wird die folgende Ausgabe ausgegeben:

MySQL ON DELETE CASCADE

Im folgenden Skript aktualisieren wir die ID des Mitarbeiters in der übergeordneten Tabelle und diese Änderung wird automatisch auch in der untergeordneten Tabelle widergespiegelt:

 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Wenn wir den Inhalt der Mitarbeiter- und Zahlungstabelle überprüfen, werden wir das sehen emp_id Spaltenwerte werden erfolgreich aktualisiert.

MySQL ON DELETE CASCADE