logo

MySQL NA DELETE CASCADE

ON DELETE CASCADE klauzula u MySQL-u se koristi za automatsko ukloniti podudarne zapise iz podređene tablice kada izbrišemo retke iz roditeljske tablice. To je svojevrsna referencijalna radnja vezana uz strani kljuc .

Pretpostavimo da smo kreirali dvije tablice sa STRANIM KLJUČEM u odnosu stranog ključa, čineći obje tablice nadređenom i podređenom. Zatim definiramo klauzulu ON DELETE CASCADE za jedan FOREIGN KEY koji mora biti postavljen da bi drugi uspio u kaskadnim operacijama. Ako je ON DELETE CASCADE definirana samo za jednu klauzulu FOREIGN KEY, tada će kaskadne operacije izbaciti pogrešku.

Primjer MySQL ON DELETE CASCADE

Hajde da shvatimo kako možemo koristiti klauzulu ON DELETE CASCADE u MySQL tablici. Prvo ćemo stvoriti dvije tablice s imenima Zaposlenik i plaćanje . Obje su tablice povezane preko stranog ključa s kaskadnom operacijom brisanja. Ovdje je zaposlenik matična tablica , a plaćanje je dječji stol . Sljedeće skripte stvaraju obje tablice zajedno s njihovim zapisima.

Tablica: Zaposlenik

uvjetni operator u Javi

Sljedeća izjava stvara tablicu Employee:

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

Zatim izvršite upit za umetanje da popunite zapise.

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

Izvršite upit SELECT za provjeru podataka u tablici, koja se može prikazati u nastavku:

MySQL NA DELETE CASCADE

Tablica: Plaćanje

Izjava u nastavku stvara tablicu Plaćanje:

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

Zatim izvršite umetnuti izjavu za popunjavanje zapisa u tablicu.

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

Izvršite upit SELECT za provjeru podataka u tablici, koja se može prikazati u nastavku:

MySQL NA DELETE CASCADE

Pusti nas izbrisati podaci iz matične tablice Employee. Da biste to učinili, izvršite sljedeću naredbu:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Gornja izjava će izbrisati evidenciju zaposlenika čija emp_id = 102 i referenciranje podatke u podređenu tablicu. Podatke možemo provjeriti pomoću naredbe SELECT koja će dati sljedeći izlaz:

MySQL NA DELETE CASCADE

U gornjem izlazu možemo vidjeti da su svi retci koji se odnose na emp_id = 102 automatski izbrisani iz obje tablice.

Kako pronaći zahvaćenu tablicu radnjom ON DELETE CASCADE?

Ponekad, prije brisanja zapisa iz tablice, želimo znati zahvaćenu tablicu referentnom radnjom ON DELETE CASCADE. Ove informacije možemo pronaći upitom iz reference_constraints u bazi podataka information_schema na sljedeći način:

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

Donja izjava daje rezultat o tablicama povezanim s tablicom zaposlenika s pravilom ON DELETE CASCADE u zaposlenikb baza podataka:

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

Nakon izvršenja gornje naredbe, dobit ćemo izlaz u nastavku:

MySQL NA DELETE CASCADE

MySQL NA KASKADNOM AŽURIRANJU

ON UPDATE CASCADE klauzula u MySQL se koristi za Ažuriraj podudarne zapise iz podređene tablice automatski kada ažuriramo retke u nadređenoj tablici. Sljedeći primjer to jasnije objašnjava.

lambda funkcija java

Prvo, moramo koristiti PROMIJENI STOL izjava za dodavanje klauzule ON UPDATE CASCADE u tablicu Plaćanje kao u nastavku:

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

To će dati sljedeći izlaz:

MySQL NA DELETE CASCADE

U donjoj skripti ažurirat ćemo ID zaposlenika u nadređenoj tablici, a on će automatski odražavati ovu promjenu iu podređenoj tablici:

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

Provjerom sadržaja tablice Employee and Payment vidjet ćemo to emp_id vrijednosti stupca će se uspješno ažurirati.

MySQL NA DELETE CASCADE