Eliminación en cascada en MySQL

Rashmi Patidar 12 abril 2022
Eliminación en cascada en MySQL

En el lenguaje MySQL, la restricción se refiere al conjunto de reglas que se aplican en la tabla para evitar algunas anomalías.

Estas anomalías conducen a registros defectuosos en la tabla. Las restricciones pueden ser de varios tipos en función del comportamiento de la falla.

Estos son integridad referencial, restricción de entidad y restricción semántica. Estos tienen significado y uso según el tipo de falla y cómo se puede evitar el comportamiento inconsistente.

Entendamos brevemente el tipo de restricciones que están presentes.

  1. Restricción de entidad es una restricción que se aplica a las entidades y atributos presentes en la tabla.

    Mantiene la consistencia dentro de los valores presentados dentro de una columna de una tabla. A menudo se conoce como validación de primer nivel, donde se mantiene la integridad de la columna.

    Ejemplo:

    create table student (stu_id int primary key, stu_name varchar2(50), stu_dept varchar2(15));
    Insert into student values(111, 'ABC', 'Chemical');
    

    La primary key es la restricción de integridad de la entidad que internamente significa que la columna stu_id es un valor único y no nulo. No se permite duplicidad en la columna stu_id, y no se permite un valor no nulo.

  2. La restricción semántica se aplica sobre una columna para mostrar valores de tipos de datos similares presentes en la tabla. Por lo general, se aplica sobre una columna para que los valores sean coherentes y sigan siendo de un tipo particular.

    Ejemplo:

    Stu_name varchar2(50);
    

    En el ejemplo anterior, varchar2 es el tipo de datos con una capacidad de 50 bytes que contienen el nombre del estudiante.

    La columna mantiene solo el tipo de caracteres de los valores, y no se permiten valores dobles ni enteros. Por lo tanto, es un tipo de restricción semántica.

  1. La integridad referencial es la restricción que se aplica a otras tablas para imponer restricciones sobre los datos. La restricción más utilizada es la restricción de clave externa.

    Si hay una modificación en la tabla principal, la tabla secundaria debe permanecer coherente con la tabla principal. Si se trata de descartar el registro, entonces la referencia en el registro secundario no debe quedarse colgando y es una restricción de integridad referencial.

    Ejemplo:

    create table report_card (stu_roll_number int, stu_marks int, stu_course varchar2(30) references student);
    

    En el ejemplo anterior, una boleta de calificaciones muestra el departamento o curso del estudiante del estudiante de la tabla principal. Si se aplica la restricción de integridad referencial, las manipulaciones en una tabla afectarán el trabajo en las tablas secundarias.

Bajo la restricción de integridad referencial, on delete cascade es una restricción de integridad referencial que elimina automáticamente los registros secundarios si se elimina el registro principal. Es en respuesta a la acción de referencia tomada de la clave externa.

Ejemplo:

CREATE TABLE Student (stu_id int(10) NOT NULL, name varchar(10) NOT NULL, birthdate date NOT NULL, PRIMARY KEY (stu_id));

La consulta anterior crea una tabla estudiante con atributos o columnas como identificación del estudiante con tipo int y clave principal como una restricción de entidad sobre la columna. Otros atributos de valores incluyen el nombre y el cumpleaños con varchar y date como tipos de datos.

CREATE TABLE Department (dept_id int(20) PRIMARY KEY NOT NULL,stu_id int(10) NOT NULL, dept_name varchar(20) NOT NULL, FOREIGN KEY (stu_id) REFERENCES Student (stu_id) ON DELETE CASCADE);

Aquí, la consulta anterior, se forma una tabla de departamentos con atributos como identificación, nombre del departamento e identificación del estudiante. Además, la identificación del estudiante actuará como una referencia o clave externa de la tabla principal.

Aquí, la restricción on delete cascade dice que cuando ocurre una eliminación en la identificación del estudiante, también se eliminará su entrada de la tabla del departamento. Por lo tanto, no habrá ninguna entrada correspondiente al estudiante en un departamento después de la eliminación.

Insertemos los registros en las tablas y veamos cómo funciona la manipulación aquí.

Primero, inserte los registros en la tabla Student.

INSERT INTO Student (stu_id, name, birthdate) VALUES  
(101, 'John', '1995-11-12'),  
(102, 'Jian', '1983-07-19'),  
(103, 'Jackey', '1965-10-23');

La consulta anterior insertará tres registros en la tabla Student.

Insertando los registros en la tabla Departamento.

INSERT INTO Department (dept_id, stu_id, dept_name) VALUES   
(301, 101, 'Physics'),  
(302, 101, 'Science'),  
(303, 102,  'Maths');

La consulta anterior insertará tres departamentos para las respectivas identificaciones de los estudiantes en el departamento de la tabla.

Ahora eliminemos un registro en la tabla principal.

DELETE FROM Student WHERE stu_id = 102; 

El resultado final eliminará el tercer registro del departamento de la tabla a medida que se elimine la referencia de su tabla principal, lo que hará que el tercer registro quede colgando.

Por lo tanto, colapsa el tercer registro usando la propiedad on delete cascade. Esta propiedad es una propiedad de restricción de integridad referencial que elimina registros en la tabla secundaria cuando la tabla principal se ve afectada.

Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artículo relacionado - MySQL Delete