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

Mary-Kate Olsen
Libérer: 2024-11-07 09:23:03
original
709 Les gens l'ont consulté

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 entre 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)
Copier après la connexion

Tentative de suppression d'une instance des deux modèles séquentiellement 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()
Copier après la connexion

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

1. DÉSACTIVER LES CLÉS :

ALTER TABLE myapp_item DISABLE KEYS;
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal