Maison >développement back-end >Tutoriel Python >Comment désactiver temporairement les contraintes de clé étrangère dans MySQL pour la manipulation de données ?

Comment désactiver temporairement les contraintes de clé étrangère dans MySQL pour la manipulation de données ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-07 08:43:02453parcourir

How to Temporarily Disable Foreign Key Constraints in MySQL for Data Manipulation?

Désactivation des contraintes de clé étrangère dans MySQL pour la manipulation temporaire des données

Dans MySQL, les contraintes de clé étrangère garantissent l'intégrité des données en évitant les incohérences dans les relations entre les tables . Cependant, ces contraintes peuvent parfois gêner les manipulations rapides des données.

Problème :

Lors de la suppression d'instances d'un modèle dans Django, des erreurs peuvent survenir en raison de contraintes de clé étrangère. Par exemple :

cursor.execute("DELETE FROM myapp_item WHERE n = %s", n)
transaction.commit_unless_managed()  # a foreign key constraint fails here

cursor.execute("DELETE FROM myapp_style WHERE n = %s", n)
transaction.commit_unless_managed()

Solution :

Pour désactiver temporairement les contraintes de clé étrangère et autoriser les suppressions, vous pouvez utiliser la commande DISABLE KEYS ou définir la variable FOREIGN_KEY_CHECKS sur 0.

Utilisation de DÉSACTIVER KEYS :

DISABLE KEYS

Cette commande désactive toutes les contraintes de clé étrangère pour la session en cours.

Utilisation de la variable SET FOREIGN_KEY_CHECKS :

SET FOREIGN_KEY_CHECKS=0;

Cette commande définit la variable globale FOREIGN_KEY_CHECKS sur 0, désactivant toutes les clés étrangères contraintes.

Important : Après avoir effectué la manipulation de données souhaitée, pensez à réactiver les contraintes de clé étrangère en redéfinissant FOREIGN_KEY_CHECKS à 1 :

SET FOREIGN_KEY_CHECKS=1;

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn