logo

MySQL EN ELIMINAR EN CASCADA

La clàusula ON DELETE CASCADE a MySQL s'utilitza automàticament eliminar els registres coincidents de la taula fill quan suprimim les files de la taula pare. És una mena d'acció referencial relacionada amb el clau estrangera .

Suposem que hem creat dues taules amb una CLAU FORA en una relació de clau estrangera, fent que ambdues taules siguin pares i fills. A continuació, definim una clàusula ON DELETE CASCADE per a una FOREIGN KEY que s'ha d'establir perquè l'altra tingui èxit en les operacions en cascada. Si es defineix ON DELETE CASCADE només per a una clàusula FOREIGN KEY, les operacions en cascada generaran un error.

MySQL ON DELETE CASCADE Exemple

Entendrem com podem utilitzar la clàusula ON DELETE CASCADE a la taula MySQL. Primer, crearem dues taules anomenades Empleat i Pagament . Ambdues taules estan relacionades mitjançant una clau estrangera amb l'operació en cascada de supressió. Aquí, un empleat és taula dels pares , i el pagament és el taula infantil . Els scripts següents creen ambdues taules juntament amb els seus registres.

Taula: Empleat

La declaració següent crea una taula 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) ); 

A continuació, executeu la consulta d'inserció per omplir els registres.

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

Executeu la consulta SELECT per verificar les dades en una taula, que es pot mostrar a continuació:

MySQL EN ELIMINAR EN CASCADA

Taula: Pagament

css primer fill

La declaració següent crea una taula de pagament:

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

A continuació, executeu el inserir declaració per omplir els registres en una taula.

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

Executeu la consulta SELECT per verificar les dades en una taula, que es pot mostrar a continuació:

MySQL EN ELIMINAR EN CASCADA

Deixa'ns esborrar dades de la taula pare Empleat. Per fer-ho, executeu la instrucció següent:

mylivecricket
 mysql> DELETE FROM Employee WHERE emp_id = 102; 

La declaració anterior suprimirà els registres dels empleats dels quals emp_id = 102 i referència dades a la taula fill. Podem verificar les dades mitjançant la instrucció SELECT que donarà la següent sortida:

MySQL EN ELIMINAR EN CASCADA

A la sortida anterior, podem veure que totes les files que fan referència a emp_id = 102 es van suprimir automàticament de les dues taules.

Com trobar la taula afectada mitjançant l'acció ON DELETE CASCADE?

De vegades, abans d'esborrar registres de la taula, volem conèixer la taula afectada per l'acció referencial ON DELETE CASCADE. Podem trobar aquesta informació consultant des de referential_constraints a la base de dades information_schema de la següent manera:

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

La instrucció següent produeix el resultat sobre les taules associades a la taula Employee amb la regla ON DELETE CASCADE a la empleatdb base de dades:

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

Després d'executar l'ordre anterior, obtindrem la sortida següent:

MySQL EN ELIMINAR EN CASCADA

MySQL EN CASCADA D'ACTUALITZACIÓ

ON UPDATE CASCADE clàusula a MySQL està acostumat actualitzar els registres coincidents de la taula fill automàticament quan actualitzem les files de la taula pare. L'exemple següent ho explica amb més claredat.

En primer lloc, hem d'utilitzar ALTERA LA TAULA declaració per afegir la clàusula ON UPDATE CASCADE a la taula Pagament de la següent manera:

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

Donarà la següent sortida:

MySQL EN ELIMINAR EN CASCADA

A l'script següent, actualitzarem l'identificador de l'empleat a la taula pare i també reflectirà automàticament aquest canvi a la taula secundària:

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

Verificant el contingut de la taula Empleat i pagament, ho veurem emp_id els valors de les columnes s'actualitzaran correctament.

MySQL EN ELIMINAR EN CASCADA