Heim > Artikel > Backend-Entwicklung > Wie kann ich Fremdschlüsseleinschränkungen in MySQL vorübergehend deaktivieren?
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 beim Löschen von Modellen.
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)
Versuch, eine Instanz zu löschen Das nacheinander Ausführen beider Modelle 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üsselbeschränkung zu umgehen, können Sie sie mit einer der folgenden Methoden vorübergehend deaktivieren:
1. TASTEN DEAKTIVIEREN:
ALTER TABLE myapp_item DISABLE KEYS;
Dieser Befehl aktiviert die Einschränkungen wieder, 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
Das obige ist der detaillierte Inhalt vonWie kann ich Fremdschlüsseleinschränkungen in MySQL vorübergehend deaktivieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!