logo

MySQL ON DELETE CASCADE

Klavzula ON DELETE CASCADE v MySQL se uporablja za samodejno Odstrani ujemajoče se zapise iz podrejene tabele, ko izbrišemo vrstice iz nadrejene tabele. Je neke vrste referenčno dejanje, povezano z tuji ključ .

Recimo, da smo ustvarili dve tabeli s TUJIM KLJUČEM v razmerju tujega ključa, tako da sta obe tabeli nadrejena in podrejena. Nato definiramo klavzulo ON DELETE CASCADE za en TUJI KLJUČ, ki mora biti nastavljen, da drugi uspe v kaskadnih operacijah. Če je ON DELETE CASCADE definiran samo za en stavek FOREIGN KEY, bodo kaskadne operacije povzročile napako.

Primer MySQL ON DELETE CASCADE

Naj razumemo, kako lahko uporabimo klavzulo ON DELETE CASCADE v tabeli MySQL. Najprej bomo ustvarili dve tabeli z imenom Zaposleni in plačilo . Obe tabeli sta povezani prek tujega ključa s kaskadno operacijo brisanja. Tukaj je zaposleni nadrejena tabela , in Plačilo je otroška miza . Naslednji skripti ustvarijo obe tabeli skupaj z njihovimi zapisi.

Tabela: Zaposleni

Naslednji stavek ustvari tabelo 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) ); 

Nato izvedite poizvedbo za vstavljanje, da izpolnite 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'); 

Izvedite poizvedbo SELECT, da preverite podatke v tabeli, ki je prikazana spodaj:

MySQL ON DELETE CASCADE

Tabela: Plačilo

Spodnja izjava ustvari tabelo Plačilo:

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

Nato izvedite vstavi izjavo da izpolnite zapise v tabelo.

sortirni niz v Javi
 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'); 

Izvedite poizvedbo SELECT, da preverite podatke v tabeli, ki je prikazana spodaj:

MySQL ON DELETE CASCADE

Dovoli nam izbrisati podatki iz nadrejene tabele Employee. Če želite to narediti, izvedite naslednji stavek:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Zgornja izjava bo izbrisala evidence zaposlenih, katerih emp_id = 102 in sklicevanje podatke v podrejeno tabelo. Podatke lahko preverimo s stavkom SELECT, ki bo dal naslednje rezultate:

ponavljanje seznama v Javi
MySQL ON DELETE CASCADE

V zgornjem izhodu lahko vidimo, da so bile vse vrstice, ki se nanašajo na emp_id = 102, samodejno izbrisane iz obeh tabel.

Kako najti prizadeto tabelo z dejanjem ON DELETE CASCADE?

Včasih želimo pred brisanjem zapisov iz tabele izvedeti prizadeto tabelo z referenčnim dejanjem ON DELETE CASCADE. Te informacije lahko najdemo s poizvedovanjem iz referential_constraints v podatkovni zbirki information_schema, kot sledi:

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

Spodnji stavek ustvari rezultat o tabelah, povezanih s tabelo Employee s pravilom ON DELETE CASCADE v zaposlenib baza podatkov:

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

Po izvedbi zgornjega ukaza bomo dobili spodnji izhod:

MySQL ON DELETE CASCADE

MySQL NA POSODOBITVI CASCADE

ON UPDATE CASCADE klavzula v MySQL je navajen nadgradnja ujemajoče se zapise iz podrejene tabele samodejno, ko posodobimo vrstice v nadrejeni tabeli. Naslednji primer to pojasni bolj jasno.

Najprej moramo uporabiti SPREMENI TABELO stavek za dodajanje klavzule ON UPDATE CASCADE v tabelo Plačilo kot spodaj:

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

Dalo bo naslednje rezultate:

MySQL ON DELETE CASCADE

V spodnjem skriptu bomo posodobili ID zaposlenega v nadrejeni tabeli, ki bo samodejno odražal to spremembo tudi v podrejeni tabeli:

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

Če preverimo vsebino tabele Zaposleni in Plačila, bomo to videli emp_id vrednosti stolpcev bodo uspešno posodobljene.

MySQL ON DELETE CASCADE