logo

MySQL AL ELIMINAR CASCADA

La cláusula ON DELETE CASCADE en MySQL se utiliza para automáticamente eliminar los registros coincidentes de la tabla secundaria cuando eliminamos las filas de la tabla principal. Es un tipo de acción referencial relacionada con la clave externa .

ordenación de matrices java

Supongamos que hemos creado dos tablas con una CLAVE EXTRANJERA en una relación de clave externa, convirtiendo ambas tablas en padre e hijo. A continuación, definimos una cláusula ON DELETE CASCADE para una CLAVE EXTRANJERA que debe configurarse para que la otra tenga éxito en las operaciones en cascada. Si ON DELETE CASCADE está definido solo para una cláusula FOREIGN KEY, las operaciones en cascada arrojarán un error.

MySQL AL ELIMINAR CASCADA Ejemplo

Entendamos cómo podemos usar la cláusula ON DELETE CASCADE en la tabla MySQL. Primero, vamos a crear dos tablas llamadas Empleado y pago . Ambas tablas están relacionadas a través de una clave externa con una operación de eliminación en cascada. Aquí, un empleado es el tabla principal , y el pago es el mesa infantil . Los siguientes scripts crean ambas tablas junto con sus registros.

Tabla: Empleado

La siguiente declaración crea una tabla Empleado:

 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ón, ejecute la consulta de inserción para completar los registros.

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

Ejecute la consulta SELECT para verificar los datos en una tabla, que se puede mostrar a continuación:

MySQL AL ELIMINAR CASCADA

Tabla: Pago

La siguiente declaración crea una tabla Pago:

 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ón, ejecute el insertar declaración para llenar los registros en una tabla.

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

Ejecute la consulta SELECT para verificar los datos en una tabla, que se puede mostrar a continuación:

MySQL AL ELIMINAR CASCADA

Nos deja borrar datos de la tabla principal Empleado. Para hacer esto, ejecute la siguiente declaración:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

La declaración anterior eliminará los registros de empleados cuyos emp_id = 102 y haciendo referencia datos en la tabla secundaria. Podemos verificar los datos usando la instrucción SELECT que dará el siguiente resultado:

MySQL AL ELIMINAR CASCADA

En el resultado anterior, podemos ver que todas las filas que hacen referencia a emp_id = 102 se eliminaron automáticamente de ambas tablas.

¿Cómo encontrar la tabla afectada por la acción ON DELETE CASCADE?

En ocasiones, antes de eliminar registros de la tabla, queremos conocer la tabla afectada por la acción referencial ON DELETE CASCADE. Podemos encontrar esta información consultando desde referencial_constraints en la base de datos information_schema de la siguiente 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 siguiente declaración produce el resultado sobre las tablas asociadas con la tabla Empleado con la regla ON DELETE CASCADE en el empleadodb base de datos:

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

Después de ejecutar el comando anterior, obtendremos el siguiente resultado:

MySQL AL ELIMINAR CASCADA

MySQL EN CASCADA DE ACTUALIZACIÓN

Cláusula ON UPDATE CASCADE en mysql se usa para actualizar los registros coincidentes de la tabla secundaria automáticamente cuando actualizamos las filas en la tabla principal. El siguiente ejemplo lo explica más claramente.

actor mamta kulkarni

Primero, necesitamos usar el ALTERAR TABLA declaración para agregar la cláusula ON UPDATE CASCADE en la tabla Pago como se muestra a continuación:

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

Dará el siguiente resultado:

MySQL AL ELIMINAR CASCADA

En el siguiente script, actualizaremos la identificación del empleado en la tabla principal y también reflejará automáticamente este cambio en la tabla secundaria:

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

Verificando el contenido de la tabla Empleado y Pago, veremos que emp_id Los valores de las columnas se actualizarán correctamente.

MySQL AL ELIMINAR CASCADA