Az ON DELETE CASCADE záradék a MySQL-ben automatikusan használatos távolítsa el az egyező rekordokat a gyermek táblából, amikor töröljük a sorokat a szülő táblából. Ez egyfajta hivatkozási művelet, amely a idegen kulcs .
Tegyük fel, hogy létrehoztunk két táblát egy IDEGEN KULCS-mal egy idegen kulcskapcsolatban, így mindkét tábla szülő és gyermek lesz. Ezután meghatározunk egy ON DELETE CASCADE záradékot az egyik FOREIGN KEY-hez, amelyet be kell állítani a másikhoz, hogy sikeres legyen a lépcsőzetes műveletekben. Ha az ON DELETE CASCADE csak egy FOREIGN KEY záradékhoz van definiálva, akkor a lépcsőzetes műveletek hibát okoznak.
MySQL ON DELETE CASCADE Példa
Nézzük meg, hogyan használhatjuk az ON DELETE CASCADE záradékot a MySQL táblában. Először is létrehozunk két nevű táblát Munkavállaló és fizetés . Mindkét tábla idegen kulcson keresztül kapcsolódik a törlési kaszkád művelethez. Itt az alkalmazott az szülő táblázat , és a Fizetés a gyermek asztal . A következő szkriptek mindkét táblát létrehozzák a rekordjaikkal együtt.
karakterlánc módszerek
táblázat: Alkalmazott
A következő utasítás létrehoz egy alkalmazott táblázatot:
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) );
Ezután hajtsa végre a beszúrási lekérdezést a rekordok kitöltéséhez.
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');
Futtassa a SELECT lekérdezést az adatok táblázatba történő ellenőrzéséhez, amely az alábbiakban látható:
táblázat: Fizetés
Az alábbi nyilatkozat létrehoz egy táblázatot: Fizetés:
mi az a rom
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 );
Ezután hajtsa végre a utasítás beszúrása táblázatba tölteni a rekordokat.
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');
Futtassa a SELECT lekérdezést az adatok táblázatba történő ellenőrzéséhez, amely az alábbiakban látható:
Hagyjuk töröl adatok a szülő táblából Munkavállaló. Ehhez hajtsa végre a következő utasítást:
mysql> DELETE FROM Employee WHERE emp_id = 102;
A fenti nyilatkozat törli azokat a munkavállalói nyilvántartásokat, akiknek emp_id = 102 és hivatkozással adatokat a gyermektáblába. Az adatokat a SELECT utasítással tudjuk ellenőrizni, amely a következő kimenetet adja:
A fenti kimenetben láthatjuk, hogy az emp_id = 102-re hivatkozó összes sor automatikusan törlődött mindkét táblából.
Hogyan lehet megtalálni az érintett táblát ON CASCADE művelettel?
Néha, mielőtt törölnénk a rekordokat a táblából, meg akarjuk ismerni az érintett táblát az ON DELETE CASCADE hivatkozási művelet által. Ezt az információt úgy találhatjuk meg, ha lekérdezünk az information_schema adatbázisban található referential_constraints paraméterből a következőképpen:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
Az alábbi utasítás az Employee táblához társított táblák eredményét adja meg az ON DELETE CASCADE szabállyal. alkalmazottdb adatbázis:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
A fenti parancs végrehajtása után az alábbi kimenetet kapjuk:
MySQL ON UPDATE CASCADE
ON UPDATE CASCADE záradék be MySQL régebben frissítés a megfelelő rekordokat a gyermek táblából automatikusan, amikor frissítjük a szülő tábla sorait. A következő példa érthetőbben magyarázza el.
Először is használnunk kell a ALTER TABLE nyilatkozat az ON UPDATE CASCADE záradék hozzáadásához a Fizetés táblázatban az alábbiak szerint:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
A következő kimenetet adja:
Az alábbi szkriptben frissítjük az alkalmazott azonosítóját a szülő táblában, és ez a változás automatikusan tükrözi a gyermek táblában is:
legjobb autó a világon
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
A Munkavállaló és fizetés tábla tartalmát ellenőrizve látni fogjuk emp_id oszlopértékek frissítése sikeresen megtörténik.