logo

MySQL NA DELETE CASCADE

Klauzule ON DELETE CASCADE v MySQL se používá automaticky odstranit odpovídající záznamy z podřízené tabulky, když odstraníme řádky z nadřazené tabulky. Je to druh referenční akce související s cizí klíč .

Předpokládejme, že jsme vytvořili dvě tabulky s CIZÍM KLÍČEM ve vztahu cizího klíče, takže obě tabulky jsou nadřazené a podřízené. Dále definujeme klauzuli ON DELETE CASCADE pro jeden FOREIGN KEY, který musí být nastaven, aby byl druhý klíč úspěšný v kaskádových operacích. Pokud je ON DELETE CASCADE definována pouze pro jednu klauzuli FOREIGN KEY, pak kaskádové operace způsobí chybu.

Příklad MySQL ON DELETE CASCADE

Pojďme pochopit, jak můžeme použít klauzuli ON DELETE CASCADE v tabulce MySQL. Nejprve vytvoříme dvě pojmenované tabulky Zaměstnanec a platba . Obě tabulky jsou propojeny prostřednictvím cizího klíče s kaskádovou operací on delete. Zde je zaměstnanec rodičovský stůl a Platba je dětský stůl . Následující skripty vytvoří obě tabulky spolu s jejich záznamy.

Tabulka: Zaměstnanec

Následující příkaz vytvoří tabulku Zaměstnanec:

 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) ); 

Dále spusťte vkládací dotaz k vyplnění záznamů.

 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'); 

Provedením dotazu SELECT ověřte data do tabulky, která může být zobrazena níže:

MySQL NA DELETE CASCADE

Tabulka: Platba

Níže uvedený výpis vytvoří tabulku Platba:

 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 ); 

Dále proveďte vložit příkaz k vyplnění záznamů do tabulky.

 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'); 

Provedením dotazu SELECT ověřte data do tabulky, která může být zobrazena níže:

MySQL NA DELETE CASCADE

Dovolte nám vymazat data z nadřazené tabulky Zaměstnanec. Chcete-li to provést, proveďte následující příkaz:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Výše uvedené prohlášení vymaže záznamy zaměstnanců, jejichž emp_id = 102 a odkazování data do podřízené tabulky. Data můžeme ověřit pomocí příkazu SELECT, který poskytne následující výstup:

MySQL NA DELETE CASCADE

Ve výše uvedeném výstupu vidíme, že všechny řádky odkazující na emp_id = 102 byly automaticky odstraněny z obou tabulek.

Jak najít ovlivněnou tabulku akcí ON DELETE CASCADE?

Někdy před odstraněním záznamů z tabulky chceme znát ovlivněnou tabulku pomocí referenční akce ON DELETE CASCADE. Tyto informace můžeme najít dotazem z reference_constraints v databázi information_schema takto:

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

Níže uvedený příkaz poskytuje výsledek o tabulkách spojených s tabulkou Zaměstnanci s pravidlem ON DELETE CASCADE v zaměstnanecdb databáze:

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

Po provedení výše uvedeného příkazu získáme výstup níže:

MySQL NA DELETE CASCADE

MySQL ON AKTUALIZACE CASCADE

klauzule ON UPDATE CASCADE v MySQL je zvyklý Aktualizace odpovídající záznamy z podřízené tabulky automaticky, když aktualizujeme řádky v nadřazené tabulce. Následující příklad to vysvětluje jasněji.

Nejprve musíme použít ALTER TABULKA příkaz k přidání klauzule ON UPDATE CASCADE do tabulky Platba, jak je uvedeno níže:

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

Poskytne následující výstup:

MySQL NA DELETE CASCADE

V níže uvedeném skriptu aktualizujeme ID zaměstnance v nadřazené tabulce a tato změna se automaticky projeví také v podřízené tabulce:

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

Ověřením obsahu tabulky Zaměstnanec a platba to uvidíme emp_id hodnoty sloupců budou úspěšně aktualizovány.

MySQL NA DELETE CASCADE