Klauzula ON DELETE CASCADE v MySQL sa používa automaticky odstrániť zodpovedajúce záznamy z podradenej tabuľky, keď odstránime riadky z nadradenej tabuľky. Ide o druh referenčnej akcie súvisiacej s cudzí kľúč .
Predpokladajme, že sme vytvorili dve tabuľky s CUDZÍM KĽÚČOM vo vzťahu cudzieho kľúča, čím sa obe tabuľky stanú rodičmi a podriadenými. Ďalej definujeme klauzulu ON DELETE CASCADE pre jeden FOREIGN KEY, ktorý musí byť nastavený, aby bol druhý v kaskádových operáciách úspešný. Ak je ON DELETE CASCADE definovaná len pre jednu klauzulu FOREIGN KEY, potom kaskádové operácie spôsobia chybu.
MySQL ON DELETE CASCADE Príklad
Poďme pochopiť, ako môžeme použiť klauzulu ON DELETE CASCADE v tabuľke MySQL. Najprv vytvoríme dve tabuľky s názvom Zamestnanec a platba . Obe tabuľky sú prepojené prostredníctvom cudzieho kľúča s kaskádovou operáciou vymazania. Tu je zamestnanec rodičovská tabuľka a Platba je detský stôl . Nasledujúce skripty vytvoria obe tabuľky spolu s ich záznamami.
Tabuľka: Zamestnanec
nulová kontrola v jave
Nasledujúci príkaz vytvorí tabuľku Zamestnanec:
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) );
Ďalej spustite dotaz na vloženie na vyplnenie záznamov.
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');
Vykonajte dotaz SELECT na overenie údajov do tabuľky, ktorá môže byť zobrazená nižšie:
Tabuľka: Platba
np.log
Nasledujúci výpis vytvorí tabuľku 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 );
Ďalej vykonajte vložiť vyhlásenie na vyplnenie záznamov do tabuľky.
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');
Vykonajte dotaz SELECT na overenie údajov do tabuľky, ktorá môže byť zobrazená nižšie:
Dovoľte nám vymazať údaje z nadradenej tabuľky Zamestnanec. Ak to chcete urobiť, vykonajte nasledujúce vyhlásenie:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Vyššie uvedený výpis vymaže záznamy zamestnancov, ktorých emp_id = 102 a odkazovanie údaje do podradenej tabuľky. Údaje môžeme overiť pomocou príkazu SELECT, ktorý poskytne nasledujúci výstup:
metódy java string
Vo vyššie uvedenom výstupe môžeme vidieť, že všetky riadky odkazujúce na emp_id = 102 boli automaticky odstránené z oboch tabuliek.
Ako nájsť ovplyvnenú tabuľku pomocou akcie ON DELETE CASCADE?
Niekedy pred odstránením záznamov z tabuľky chceme poznať ovplyvnenú tabuľku pomocou referenčnej akcie ON DELETE CASCADE. Tieto informácie môžeme nájsť dotazovaním z referential_constraints v databáze 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'
Nižšie uvedené vyhlásenie vytvára výsledok o tabuľkách priradených k tabuľke Zamestnanci s pravidlom ON DELETE CASCADE v zamestnanecdb databáza:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Po vykonaní vyššie uvedeného príkazu dostaneme výstup nižšie:
MySQL ON UPDATE CASCADE
Klauzula ON UPDATE CASCADE v MySQL je zvyknutý aktualizovať zhodné záznamy z podradenej tabuľky automaticky, keď aktualizujeme riadky v nadradenej tabuľke. Nasledujúci príklad to vysvetľuje jasnejšie.
menná konvencia java
Najprv musíme použiť ALTER TABLE vyhlásenie na pridanie klauzuly ON UPDATE CASCADE do tabuľky Platba, ako je uvedené nižšie:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Poskytne nasledujúci výstup:
V nižšie uvedenom skripte aktualizujeme ID zamestnanca v nadradenej tabuľke a táto zmena sa automaticky prejaví aj v podradenej tabuľke:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Overením obsahu tabuľky Zamestnanec a Platba to uvidíme emp_id hodnoty stĺpcov budú úspešne aktualizované.