Desactivar la restricción de clave externa en MySQL

Mehvish Ashiq 15 febrero 2024
  1. Desactivar la restricción de clave externa en MySQL
  2. Establezca FOREIGN_KEY_CHECKS para desactivar la clave externa en MySQL
Desactivar la restricción de clave externa en MySQL

Hoy, aprenderemos a usar FOREIGN_KEY_CHECKS en MySQL Workbench para desactivar temporalmente las restricciones de clave externa en MySQL.

Desactivar la restricción de clave externa en MySQL

Hay varias situaciones en las que desactivamos temporalmente las claves externas. Por ejemplo, cargar datos en la tabla principal y secundaria en cualquier orden.

En ese caso, podemos usar FOREIGN_KEY_CHECKS para desactivar restricciones de clave externa en MySQL Server. Para aprender eso, creemos dos tablas y llenémoslas primero.

Código de ejemplo:

# create a `student` table
CREATE TABLE student(
    student_id INT NOT NULL PRIMARY KEY,
    student_name VARCHAR(255) NOT NULL
);

# create a `course` table
CREATE TABLE course(
    course_id INT NOT NULL PRIMARY KEY,
    course_name VARCHAR(255),
    student_id INT,
    FOREIGN KEY(student_id)
	REFERENCES student(student_id)
);

Código de ejemplo:

# insert data into the `student` table
INSERT INTO student(student_id, student_name)
VALUES
(1, 'Maryam Taymor'),
(2, 'Mehvish Ashiq'),
(3, 'James Daniel'),
(4, 'Rahul Agarwal');

# insert data into the `course` table
INSERT INTO course(course_id, course_name, student_id)
VALUES
(1, 'Java Programming', 4),
(2, 'Data Science', 3),
(3, 'Computer Vision', 2),
(4, 'Python Programming', 1);

Utilice el comando SELECCIONAR para ver los datos actuales en ambas tablas.

SELECT * FROM student;
SELECT * FROM course;

Salida (para la tabla estudiante):

+------------+---------------+
| student_id | student_name  |
+------------+---------------+
|          1 | Maryam Taymor |
|          2 | Mehvish Ashiq |
|          3 | James Daniel  |
|          4 | Rahul Agarwal |
+------------+---------------+
4 rows in set (0.00 sec)

Salida (para la tabla curso):

+-----------+----------------------+------------+
| course_id | course_name          | student_id |
+-----------+----------------------+------------+
|         1 | Java Programming     |          4 |
|         2 | Data Science         |          3 |
|         3 | Computer Vision      |          2 |
|         4 | Python Programming   |          1 |
+-----------+----------------------+------------+
4 rows in set (0.00 sec)

Establezca FOREIGN_KEY_CHECKS para desactivar la clave externa en MySQL

Digamos que tenemos otro estudiante que quiere registrarse en Programación Java. Esta vez, queremos insertar ese registro en la tabla secundaria (tabla curso) primero.

Código de ejemplo:

INSERT INTO course(course_id,course_name, student_id)
VALUES
(5, 'Java Programming', 5);

En cuanto ejecutamos la consulta para insertar el registro en la tabla curso, genera el siguiente error.

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ms23`.`course`, CONSTRAINT `course_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`))

Sucede por tener una clave foránea en la tabla curso. Entonces, podemos deshabilitar las comprobaciones de clave externa de la siguiente manera.

SET foreign_key_checks = 0;

Ahora, insértelo de nuevo en la tabla curso.

INSERT INTO course(course_id,course_name, student_id)
VALUES
(5, 'Java Programming', 5);

Esta vez, el registro se inserta correctamente. Utilice el comando SELECCIONAR para confirmar la inserción.

SELECT * from course;

Salida (para la tabla curso):

+-----------+----------------------+------------+
| course_id | course_name          | student_id |
+-----------+----------------------+------------+
|         1 | Java Programming     |          4 |
|         2 | Data Science         |          3 |
|         3 | Computer Vision      |          2 |
|         4 | Python Programming   |          1 |
|         5 | Java Programming     |          5 |
+-----------+----------------------+------------+
5 rows in set (0.00 sec)

No olvide establecer el valor de FOREIGN_KEY_CHECKS en 1 para volver a habilitar la verificación de restricción de clave externa.

SET foreign_key_checks = 1;

También podemos usar los mismos comandos en phpMyAdmin, pero asegúrese de DESMARCAR la opción resaltada en la siguiente captura de pantalla.

desactive la restricción de clave externa en mysql - deshabilite la clave externa en phpmyadmin

Recuerde, cuando volvemos a establecer el valor de FOREIGN_KEY_CHECKS en 1, no activa ninguna validación de los datos actuales que insertamos después de desactivar las comprobaciones de clave externa.

Solo verifica las nuevas actualizaciones y adiciones a la base de datos. También podemos usar FOREIGN_KEY_CHECKS para deshabilitar las restricciones de clave externa globalmente.

Código de ejemplo:

# turn off foreign key constraints globally
SET GLOBAL FOREIGN_KEY_CHECKS=0;
# turn on foreign key constraints globally
SET GLOBAL FOREIGN_KEY_CHECKS=1;
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MySQL Key