logo

MySQL IESLĒGTS KASKĀDES DZĒŠANA

ON DELETE CASCADE klauzula MySQL tiek izmantota, lai automātiski noņemt atbilstošos ierakstus no pakārtotās tabulas, kad dzēšam rindas no vecāktabulas. Tā ir sava veida atsauces darbība, kas saistīta ar sveša atslēga .

Pieņemsim, ka esam izveidojuši divas tabulas ar SVEŠO ATSLĒGU ārējās atslēgas attiecībās, padarot abas tabulas par vecāku un bērnu. Tālāk mēs definējam klauzulu ON DELETE CASCADE vienai ĀRVALSTS ATSLĒGAI, kas jāiestata otrai, lai veiksmīgi veiktu kaskādes darbības. Ja ON DELETE CASCADE ir definēta tikai vienai FOREIGN KEY klauzulai, kaskādes operācijas radīs kļūdu.

MySQL ON DELETE CASCADE Piemērs

Ļaujiet mums saprast, kā mēs varam izmantot klauzulu ON DELETE CASCADE MySQL tabulā. Pirmkārt, mēs izveidosim divas nosauktas tabulas Darbinieks un samaksa . Abas tabulas ir saistītas, izmantojot ārējo atslēgu ar dzēšanas kaskādes darbību. Šeit Darbinieks ir vecāku tabula , un Maksājums ir bērnu galds . Šie skripti izveido abas tabulas kopā ar to ierakstiem.

Tabula: Darbinieks

Šis paziņojums izveido tabulu Darbinieks:

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

Pēc tam izpildiet ievietošanas vaicājumu, lai aizpildītu ierakstus.

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

Izpildiet vaicājumu SELECT, lai pārbaudītu datus tabulā, kuru var parādīt zemāk:

MySQL IESLĒGTS KASKĀDES DZĒŠANA

Tabula: Maksājums

Tālāk sniegtais paziņojums izveido tabulu Maksājums:

ilgi int java
 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 ); 

Tālāk izpildiet ievietot paziņojumu lai ierakstus aizpildītu tabulā.

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

Izpildiet vaicājumu SELECT, lai pārbaudītu datus tabulā, kuru var parādīt zemāk:

MySQL IESLĒGTS KASKĀDES DZĒŠANA

Ļauj mums dzēst dati no vecāku tabulas Darbinieks. Lai to izdarītu, izpildiet šādu paziņojumu:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Iepriekš minētais paziņojums izdzēsīs darbinieku ierakstus, kuru emp_id = 102 un atsaucoties datus bērnu tabulā. Mēs varam pārbaudīt datus, izmantojot SELECT paziņojumu, kas sniegs šādu izvadi:

MySQL IESLĒGTS KASKĀDES DZĒŠANA

Iepriekš minētajā izvadē mēs redzam, ka visas rindas, kas atsaucas uz emp_id = 102, tika automātiski izdzēstas no abām tabulām.

Kā atrast ietekmēto tabulu, izmantojot darbību ON DELETE CASCADE?

Dažreiz pirms ierakstu dzēšanas no tabulas mēs vēlamies uzzināt tabulu, kuru ietekmē atsauces darbība ON DELETE CASCADE. Mēs varam atrast šo informāciju, veicot vaicājumus no references_constraints informācijas_shēmas datubāzē šādi:

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

Tālāk sniegtais paziņojums rada rezultātu par tabulām, kas saistītas ar tabulu Darbinieks ar kārtulu ON DELETE CASCADE darbinieksdb datu bāze:

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

Pēc iepriekš minētās komandas izpildes mēs saņemsim tālāk norādīto izvadi:

MySQL IESLĒGTS KASKĀDES DZĒŠANA

MySQL ATJAUNINĀJUMA KASKĀDĒ

ON UPDATE CASCADE klauzula MySQL ir pieradis Atjaunināt atbilstošos ierakstus no pakārtotās tabulas automātiski, kad mēs atjauninām rindas vecāktabulā. Nākamais piemērs to izskaidro skaidrāk.

Pirmkārt, mums ir jāizmanto MAINĪT TABLU paziņojumu, lai tabulā Maksājums pievienotu klauzulu ON UPDATE CASCADE, kā norādīts tālāk:

pārvērst virkni par int
 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Tas dos šādu rezultātu:

MySQL IESLĒGTS KASKĀDES DZĒŠANA

Tālāk esošajā skriptā mēs atjaunināsim darbinieka ID vecāku tabulā, un tas automātiski atspoguļos šīs izmaiņas arī pakārtotajā tabulā:

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

Pārbaudot tabulas Darbinieks un maksājums saturu, mēs to redzēsim emp_id kolonnu vērtības tiks veiksmīgi atjauninātas.

MySQL IESLĒGTS KASKĀDES DZĒŠANA