Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment désactiver la vérification de clé étrangère dans MySQL

La vérification de clé étrangère dans MySQL peut vous empêcher d'effectuer certaines mises à jour de la base de données sur des tables qui ont des contraintes de clé étrangère. Dans de tels cas, vous pouvez désactiver temporairement la vérification de la clé étrangère dans MySQL, effectuer vos mises à jour et activer la vérification de la clé étrangère dans MySQL par la suite. Voici comment désactiver la contrainte de clé étrangère dans MySQL.

Comment désactiver la vérification de clé étrangère dans MySQL

Voici les étapes pour désactiver la vérification de clé étrangère dans MySQL.

Vous pouvez désactiver la vérification des clés étrangères dans MySQL en définissant la variable système foreign_key_checks à 0.

SET foreign_key_checks = 0

De même, vous pouvez activer la vérification de clé étrangère dans MySQL en définissant la variable système foreign_key_check à 1

SET foreign_key_checks = 1

Cependant, veuillez noter qu'après avoir activé les vérifications de clé étrangère, MySQL ne revalidera pas vos données existantes que vous avez ajoutées après la désactivation de la vérification de clé étrangère. Il ne vérifiera que les nouveaux ajouts/mises à jour de votre base de données.

Lecture bonus :comment créer une séquence dans MySQL

Prenons un exemple. Disons que vous avez les deux tableaux suivants pays et villes de sorte que les villes a une colonne de clé étrangère country_id qui fait référence à country_id dans pays

CREATE TABLE countries(
    country_id INT PRIMARY KEY AUTO_INCREMENT,
    country_name VARCHAR(255) NOT NULL
);

CREATE TABLE cities(
    city_id INT PRIMARY KEY AUTO_INCREMENT,
    city_name VARCHAR(255),
    country_id INT,
    FOREIGN KEY(country_id) 
		REFERENCES countries(country_id)
);

Lecture bonus :Comment comparer deux tables dans MySQL

Essayons maintenant d'insérer une ligne dans villes table sans mentionner le country_id valeur de clé étrangère et vous obtiendrez une erreur comme indiqué ci-dessous.

mysql> INSERT INTO cities(city_name, country_id)
       VALUES('NYC',1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint
fails (`sample`.`cities`, CONSTRAINT `cities_ibfk_1` FOREIGN KEY (`country_id`)
 REFERENCES `countries` (`country_id`))

Désactivons maintenant la vérification des clés étrangères dans MySQL et réessayons d'insérer la ligne.

mysql> SET foreign_key_checks = 0;

mysql> INSERT INTO cities(city_name, country_id)
       VALUES('NYC',1);

mysql> select * from cities;
+---------+-----------+------------+
| city_id | city_name | country_id |
+---------+-----------+------------+
|       2 | NYC       |          1 |
+---------+-----------+------------+

Maintenant, nous activons la vérification étrangère dans MySQL

mysql> SET foreign_key_checks = 1;

Lecture bonus :comment obtenir les données du dernier mois dans MySQL

Nous insérons enfin une ligne correspondante dans pays tableau.

mysql> INSERT INTO countries(country_id, country_name)
       VALUES(1,'USA');

mysql> select * from countries;
+------------+--------------+
| country_id | country_name |
+------------+--------------+
|          1 | USA          |
+------------+--------------+

Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !