logo

MySQL ON DELETE CASCADE

Clauza ON DELETE CASCADE din MySQL este folosită automat elimina înregistrările care se potrivesc din tabelul copil când ștergem rândurile din tabelul părinte. Este un fel de acțiune referențială legată de cheie externă .

Să presupunem că am creat două tabele cu o CHEIE străină într-o relație de cheie străină, făcând ambele tabele un părinte și un copil. În continuare, definim o clauză ON DELETE CASCADE pentru una FOREIGN KEY care trebuie setată pentru ca cealaltă să reușească operațiunile în cascadă. Dacă ON DELETE CASCADE este definită pentru o singură clauză FOREIGN KEY, atunci operațiile în cascadă vor genera o eroare.

MySQL ON DELETE CASCADE Exemplu

Să înțelegem cum putem folosi clauza ON DELETE CASCADE din tabelul MySQL. Mai întâi, vom crea două tabele numite Angajat și Plată . Ambele tabele sunt legate printr-o cheie străină cu operația de ștergere în cascadă. Aici, un angajat este masa părinte , iar Plata este masa pentru copii . Următoarele scripturi creează ambele tabele împreună cu înregistrările lor.

Tabel: Angajat

comenzile linux creează un folder

Următoarea instrucțiune creează un tabel 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) ); 

Apoi, executați interogarea de inserare pentru a completa înregistrările.

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

Executați interogarea SELECT pentru a verifica datele într-un tabel, care poate fi afișat mai jos:

MySQL ON DELETE CASCADE

Tabel: Plata

tutorial react js

Declarația de mai jos creează un tabel de plată:

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

Apoi, executați inserare declarație pentru a completa înregistrările într-un tabel.

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

Executați interogarea SELECT pentru a verifica datele într-un tabel, care poate fi afișat mai jos:

MySQL ON DELETE CASCADE

Permiteți-ne șterge date din tabelul părinte Angajat. Pentru a face acest lucru, executați următoarea instrucțiune:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Declarația de mai sus va șterge înregistrările angajaților ale căror emp_id = 102 și referire date în tabelul copil. Putem verifica datele folosind instrucțiunea SELECT care va da următoarea ieșire:

leagăn java
MySQL ON DELETE CASCADE

În rezultatul de mai sus, putem vedea că toate rândurile care fac referire la emp_id = 102 au fost șterse automat din ambele tabele.

Cum să găsiți tabelul afectat prin acțiunea ON DELETE CASCADE?

Uneori, înainte de a șterge înregistrările din tabel, dorim să cunoaștem tabelul afectat prin acțiunea referențială ON DELETE CASCADE. Putem găsi aceste informații interogând din referential_constraints din baza de date information_schema, după cum urmează:

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

Instrucțiunea de mai jos produce rezultatul despre tabelele asociate cu tabelul Employee cu regula ON DELETE CASCADE în angajatdb Bază de date:

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

După executarea comenzii de mai sus, vom obține rezultatul de mai jos:

MySQL ON DELETE CASCADE

MySQL ÎN CASCADE DE ACTUALIZARE

ON UPDATE CASCADE clauza în MySQL este obișnuit să Actualizați înregistrările care se potrivesc din tabelul copil automat când actualizăm rândurile din tabelul părinte. Următorul exemplu explică mai clar.

listbox html

În primul rând, trebuie să folosim ALTER TABLE declarație pentru a adăuga clauza ON UPDATE CASCADE în tabelul Plată după cum urmează:

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

Va da urmatoarea iesire:

MySQL ON DELETE CASCADE

În scriptul de mai jos, vom actualiza id-ul angajatului în tabelul părinte și va reflecta automat această modificare și în tabelul copil:

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

Verificând conținutul tabelului de angajați și plăți, vom vedea asta emp_id valorile coloanei vor fi actualizate cu succes.

MySQL ON DELETE CASCADE