Desactivar la restricción de clave externa en MySQL
- Desactivar la restricción de clave externa en MySQL
-
Establezca
FOREIGN_KEY_CHECKS
para desactivar la 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.
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;