"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment désactiver temporairement les contraintes de clé étrangère dans MySQL ?

Comment désactiver temporairement les contraintes de clé étrangère dans MySQL ?

Publié le 2024-11-18
Parcourir:455

How to Temporarily Disable Foreign Key Constraints in MySQL?

Désactivation temporaire des contraintes de clé étrangère dans MySQL

Dans MySQL, les contraintes de clé étrangère renforcent l'intégrité référentielle, garantissant la cohérence des données dans les tables associées. Cependant, il existe des scénarios dans lesquels la désactivation temporaire de ces contraintes est nécessaire, par exemple lors de suppressions de modèles.

Considérez les modèles Django suivants avec des relations de clés étrangères mutuelles :

class Item(models.Model):
    style = models.ForeignKey('Style', on_delete=models.CASCADE)

class Style(models.Model):
    item = models.ForeignKey('Item', on_delete=models.CASCADE)

Tenter de supprimer une instance des deux modèles de manière séquentielle peut entraîner une erreur :

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

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

Pour contourner cette contrainte de clé étrangère, vous pouvez la désactiver temporairement en utilisant l'une des méthodes suivantes :

1. DISABLE KEYS :

ALTER TABLE myapp_item DISABLE KEYS;

Cette commande réactive les contraintes une fois la table rouverte ou fermée.

2. SET FOREIGN_KEY_CHECKS : 

SET FOREIGN_KEY_CHECKS = 0;  # Disable foreign key checks

N'oubliez pas de réactiver les contraintes après l'opération de suppression :

SET FOREIGN_KEY_CHECKS = 1;  # Re-enable foreign key checks
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3