Enigma „Falsche Fremdschlüsseleinschränkung fehlgeschlagen“: Untersuchung eines unvorhergesehenen Fehlers
Beim Ausführen einer DROP TABLE-Anweisung für die Bereichstabelle können Benutzer möglicherweise stoßen auf den rätselhaften Fehler: „Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl.“ Dieses scheinbar verwirrende Problem tritt auch nach sorgfältiger Entfernung aller anderen Tabellen mit Fremdschlüsselverweisen auf den Bereich auf.
Wenn man sich die Details der Bereichstabelle genauer ansieht, besitzt sie einen Primärschlüssel (area_id), einen eindeutigen Schlüssel (nombre_area_UNIQUE), und eine Sammlung von Nicht-Null-Spalten. Da InnoDB-Tabellen so konzipiert sind, dass sie Fremdschlüsseleinschränkungen in verschiedenen Schemata ausschließen, wird das Vorhandensein von Fremdschlüsseln aus nicht vorhandenen Tabellen zu einem Rätsel.
Der Kern des Problems liegt jedoch in der verwendeten spezifischen Software. Bei der Verwendung von MySQL Query Browser oder phpMyAdmin tritt ein auffälliges Merkmal auf: Jede Abfrage initiiert eine neue Verbindung. Diese Eigenart zwingt den Benutzer dazu, die gesamte Reihe von Drop-Anweisungen in einer einzigen Abfrage zusammenzufassen.
Um die Situation effektiv zu beheben, kann die folgende Folge von Anweisungen eingesetzt werden:
<code class="sql">SET FOREIGN_KEY_CHECKS=0; DROP TABLE my_first_table_to_drop; DROP TABLE my_second_table_to_drop; SET FOREIGN_KEY_CHECKS=1;</code>
Durch Aufruf SET FOREIGN_KEY_CHECKS=0, Fremdschlüsseleinschränkungen werden vorübergehend deaktiviert, was das Löschen der Zieltabellen erleichtert. Anschließend bietet die erneute Aktivierung der Einschränkungen mit SET FOREIGN_KEY_CHECKS=1 eine zusätzliche Schutzebene. Dadurch wird der wiederkehrende Fehler umgangen, sodass der Benutzer die gewünschte Tabelle erfolgreich löschen kann.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Foreign Key Constraint Fails“, wenn ich eine Tabelle in MySQL lösche?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!