„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Fremdschlüsseleinschränkungen in MySQL vorübergehend deaktivieren?

Wie kann ich Fremdschlüsseleinschränkungen in MySQL vorübergehend deaktivieren?

Veröffentlicht am 18.11.2024
Durchsuche:808

How to Temporarily Disable Foreign Key Constraints in MySQL?

Vorübergehende Deaktivierung von Fremdschlüsseleinschränkungen in MySQL

In MySQL erzwingen Fremdschlüsseleinschränkungen die referenzielle Integrität und stellen die Datenkonsistenz über verwandte Tabellen hinweg sicher. Es gibt jedoch Szenarien, in denen eine vorübergehende Deaktivierung dieser Einschränkungen erforderlich ist, beispielsweise während Modelllöschungen.

Betrachten Sie die folgenden Django-Modelle mit gegenseitigen Fremdschlüsselbeziehungen:

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

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

Der Versuch, eine Instanz beider Modelle nacheinander zu löschen, kann zu einem Fehler führen:

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()

Um diese Fremdschlüsseleinschränkung zu umgehen, können Sie sie mit einer der folgenden Methoden vorübergehend deaktivieren:

1. DISABLE KEYS:

ALTER TABLE myapp_item DISABLE KEYS;

Dieser Befehl aktiviert die Einschränkungen erneut, sobald die Tabelle erneut geöffnet oder geschlossen wird.

2. SET FOREIGN_KEY_CHECKS:

SET FOREIGN_KEY_CHECKS = 0;  # Disable foreign key checks

Denken Sie daran, die Einschränkungen nach dem Löschvorgang wieder zu aktivieren:

SET FOREIGN_KEY_CHECKS = 1;  # Re-enable foreign key checks
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3