Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Fremdschlüsseleinschränkungen in MySQL vorübergehend deaktivieren?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 09:23:03643Durchsuche

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 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn