ON DELETE CASCADE-clausule in MySQL wordt automatisch gebruikt verwijderen de overeenkomende records uit de onderliggende tabel wanneer we de rijen uit de bovenliggende tabel verwijderen. Het is een soort referentiële actie gerelateerd aan de vreemde sleutel .
Stel dat we twee tabellen hebben gemaakt met een FOREIGN KEY in een externe sleutelrelatie, waardoor beide tabellen een ouder en een kind zijn. Vervolgens definiëren we een ON DELETE CASCADE-clausule voor de ene FOREIGN KEY die moet worden ingesteld zodat de andere kan slagen in de trapsgewijze bewerkingen. Als de ON DELETE CASCADE voor slechts één FOREIGN KEY-clausule is gedefinieerd, zullen trapsgewijze bewerkingen een fout opleveren.
MySQL ON DELETE CASCADE Voorbeeld
Laten we begrijpen hoe we de ON DELETE CASCADE-clausule in de MySQL-tabel kunnen gebruiken. Eerst gaan we twee tabellen maken met de naam Werknemer en betaling . Beide tabellen zijn gerelateerd via een externe sleutel met een cascadebewerking bij het verwijderen. Hier is een werknemer de ouder tafel , en Betaling is de kindertafel . De volgende scripts maken beide tabellen samen met hun records.
Tabel: Medewerker
Met de volgende instructie wordt een tabel Werknemer gemaakt:
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) );
Voer vervolgens de invoegquery uit om de records te vullen.
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');
Voer de SELECT-query uit om de gegevens in een tabel te verifiëren, die hieronder kan worden weergegeven:
Tabel: Betaling
Met de onderstaande verklaring wordt een tabel Betaling aangemaakt:
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 );
Voer vervolgens de verklaring invoegen om de records in een tabel te vullen.
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');
Voer de SELECT-query uit om de gegevens in een tabel te verifiëren, die hieronder kan worden weergegeven:
Laat ons verwijderen gegevens uit de bovenliggende tabel Werknemer. Om dit te doen, voert u de volgende instructie uit:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Met de bovenstaande verklaring worden de werknemersrecords verwijderd waarvan emp_id = 102 En verwijzend gegevens in de onderliggende tabel. We kunnen de gegevens verifiëren met behulp van de SELECT-instructie die de volgende uitvoer oplevert:
In de bovenstaande uitvoer kunnen we zien dat alle rijen die verwijzen naar emp_id = 102 automatisch uit beide tabellen zijn verwijderd.
Hoe kan ik de betreffende tabel vinden via de actie ON DELETE CASCADE?
Soms willen we, voordat we records uit de tabel verwijderen, weten om welke tabel het gaat door de verwijzingsactie ON DELETE CASCADE. We kunnen deze informatie vinden door als volgt een query uit te voeren op de referential_constraints in de information_schema-database:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
De onderstaande verklaring levert het resultaat op voor de tabellen die zijn gekoppeld aan de tabel Werknemer met de regel ON DELETE CASCADE in de medewerkerdb databank:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Na het uitvoeren van de bovenstaande opdracht krijgen we de onderstaande uitvoer:
MySQL OP UPDATE CASCADE
ON UPDATE CASCADE-clausule in MySQL is gewend aan update de overeenkomende records uit de onderliggende tabel automatisch wanneer we de rijen in de bovenliggende tabel bijwerken. Het volgende voorbeeld legt het duidelijker uit.
Eerst moeten we gebruik maken van de WIJZIG TABEL instructie om de ON UPDATE CASCADE-clausule toe te voegen aan de tabel Betaling, zoals hieronder:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Het geeft de volgende uitvoer:
In het onderstaande script updaten we de ID van de werknemer in de bovenliggende tabel, en deze wijziging wordt automatisch ook in de onderliggende tabel weergegeven:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Als we de inhoud van de tabel Werknemer en Betaling verifiëren, zullen we dat zien emp_id kolomwaarden worden succesvol bijgewerkt.