logo

MySQL CASCADE TÖRLÉSE

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ó:

MySQL CASCADE TÖRLÉSE

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ó:

MySQL CASCADE TÖRLÉSE

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:

MySQL CASCADE TÖRLÉSE

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 CASCADE TÖRLÉSE

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:

MySQL CASCADE TÖRLÉSE

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.

MySQL CASCADE TÖRLÉSE