Wie behebt man den MySQL-Fehler „Fremdschlüsselbeschränkung kann nicht hinzugefügt werden“?

Veröffentlicht: 2022-12-22

Wie beheben Sie den Fehler „ MySQL kann Fremdschlüsselbeschränkung nicht hinzufügen “? Sie erhalten möglicherweise die folgende Fehlermeldung, wenn Sie versuchen, einer MySQL-Tabelle eine Fremdschlüsseleinschränkung hinzuzufügen: „ ERROR 1215 (HY000): Fremdschlüsseleinschränkung kann nicht hinzugefügt werden “.

Ein Fehler wie dieser ist sehr allgemein und liefert keine spezifischen Details bezüglich des spezifischen Grundes, warum MySQL keine Fremdschlüsseleinschränkung in eine Tabelle einfügen kann. Um dieses Problem zu beheben, müssen Sie die genaue Ursache des Problems ermitteln.

Dieser Artikel erklärt den Grund für den MySQL-Fehler „#1215 – Cannot Add Foreign Key Constraint“, wie man den Grund findet und wie man ihn mit vier effektiven Methoden behebt.

Wie behebt man den MySQL-Fehler „Fremdschlüsselbeschränkung kann nicht hinzugefügt werden“?

Was ist der Grund für den MySQL-Fehler „#1215 – Fremdschlüsselbeschränkung kann nicht hinzugefügt werden“?

Dieser Fehler kann verschiedene Ursachen haben. Um die Ursache dieses Fehlers zu ermitteln, untersuchen Sie am besten den Abschnitt LATEST FOREIGN KEY ERROR von SHOW ENGINE INNODB STATUS.

Auf diese Weise erhalten Sie ein besseres Verständnis für das Problem. Sie können Ihren Fall anhand der folgenden Liste identifizieren:

Normalerweise ist beim Laden von Dumps die Tabelle oder der Index, auf die sich die Einschränkung bezieht, nicht vorhanden

Manchmal existiert die Datenbanktabelle, die Kunden Einschränkungen hinzufügen möchten, nicht, was zu einer 1215-Fehlermeldung führt.

Es gibt jedoch keinen Hinweis darauf, dass die Tabelle nicht vorhanden ist, daher wird empfohlen, dass Sie den Befehl verwenden, um festzustellen, welche Tabellen in der Datenbank verfügbar sind.

Führen Sie SHOW TABLES oder SHOW CREATE TABLE für jede der übergeordneten Tabellen aus. Jede Tabelle, die einen Fehler 1146 zurückgibt, weist darauf hin, dass die Tabellen in der falschen Reihenfolge erstellt wurden.

Die Lösung besteht darin, das fehlende CREATE TABLE auszuführen und es erneut zu versuchen oder die Fremdschlüsselprüfung vorübergehend zu deaktivieren. Dieser Schritt muss unbedingt während Backup-Wiederherstellungen durchgeführt werden, in denen Zirkelverweise vorhanden sein können.

Führen Sie den folgenden Code aus, um den Fehler zu beheben:

 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

Tabellen oder Indizes in der Einschränkungsreferenz missbrauchen Anführungszeichen

Wenn Sie diesen Fehler diagnostizieren möchten, überprüfen Sie jede FOREIGN KEY-Deklaration und stellen Sie sicher, dass keine Anführungszeichen um Objektqualifizierer stehen oder dass Anführungszeichen um die Tabelle und ein Paar um jeden Spaltennamen stehen.

Dies kann behoben werden, indem entweder nichts zitiert wird oder die Tabelle und die Spalte getrennt zitiert werden.

Der lokale Schlüssel, die Fremdtabelle oder die Spalte in den Einschränkungsreferenzen enthält einen Tippfehler

Es ist möglich, diesen Fehler zu diagnostizieren, indem Sie SHOW TABLES und SHOW COLUMNS ausführen und die Zeichenfolgen mit denen vergleichen, die in Ihrer REFERENCES-Deklaration angegeben sind. Der Tippfehler sollte korrigiert werden, sobald er entdeckt wird.

Die Spalte, auf die sich die Einschränkung bezieht, hat nicht den gleichen Typ oder die gleiche Breite wie die Fremdspalte

Verwenden Sie zur Diagnose das übergeordnete Element SHOW CREATE TABLE, um sicherzustellen, dass die lokale Spalte und die referenzierte Spalte denselben Datentyp und dieselbe Breite enthalten.

Das Problem kann gelöst werden, indem Sie Ihre DDL-Anweisung bearbeiten, um sicherzustellen, dass die Spaltendefinition in der untergeordneten Tabelle mit der in der übergeordneten Tabelle übereinstimmt.

Der Fremdkörper ist keinerlei SCHLÜSSEL

Um dieses Problem zu diagnostizieren, verwenden Sie das übergeordnete SHOW CREATE TABLE, um den REFERENCES-Teil der Tabelle zu untersuchen, um sicherzustellen, dass die darauf verweisende Spalte nicht indiziert ist.

Beheben Sie das Problem, indem Sie die Spalte entweder zu einem SCHLÜSSEL, EINZIGARTIGEN SCHLÜSSEL oder einem PRIMÄRSCHLÜSSEL machen.

Der Fremdschlüssel ist ein mehrspaltiges PK oder UK, wobei die referenzierte Spalte nicht ganz links ist

Um diesen Fehler zu diagnostizieren, führen Sie den übergeordneten Befehl SHOW CREATE TABLE aus, um festzustellen, ob der REFERENCES-Teil auf eine Spalte zeigt, die in einigen mehrspaltigen Indizes vorhanden ist, aber in ihrer Definition nicht ganz links steht.

Sie können das Problem beheben, indem Sie der übergeordneten Tabelle einen Index hinzufügen, bei dem die referenzierte Spalte ganz links oder die einzige Spalte ist.

Unterschiedliche Zeichensätze/Sortierungen zwischen den beiden Tabellen/Spalten

Um das Problem zu diagnostizieren, führen Sie SHOW CREATE TABLE parent aus und vergewissern Sie sich, dass die Teile CHARACTER SET und COLLATE der untergeordneten Spalte denen in der übergeordneten Tabelle entsprechen.

Um dies zu beheben, stellen Sie sicher, dass die DDL der untergeordneten Tabelle mit dem Zeichensatz und der Sortierung der übergeordneten Tabelle/Spalte übereinstimmt, oder ändern Sie die übergeordnete Tabelle, sodass ihre Definition mit der Definition der untergeordneten Tabelle übereinstimmt.

Die übergeordnete Tabelle verwendet InnoDB nicht

Das Problem kann diagnostiziert werden, indem SHOW CREATE TABLE parent ausgeführt und nach ENGINE=INNODB gesucht wird.

ÄNDERN Sie die übergeordnete Tabelle, um von MySQL zu InnoDB zu wechseln, um dieses Problem zu beheben.

Wie finde ich den Grund für den Fehler „Fremdschlüsselbeschränkung kann nicht hinzugefügt werden“?

Dieser Fehler weist nicht auf den spezifischen Grund für die Unfähigkeit von MySQL hin, eine Fremdschlüsseleinschränkung für die Tabelle zu implementieren, was sehr allgemein ist.

Um dieses Problem zu beheben, müssen Sie die genaue Ursache ermitteln. Sie können dies tun, indem Sie die folgende Abfrage in Ihrem MySQL-Client ausführen:

 SHOW ENGINE INNODB STATUS;

Aus dieser Abfrage sind drei Felder zurückzugeben: Typ, Name und Status. Der LATEST FOREIGN KEY ERROR kann identifiziert werden, indem die Statusspalte des Ergebnisses erweitert wird.

In diesem Abschnitt soll ermittelt werden, warum die letzte Änderungsabfrage fehlgeschlagen ist, damit Sie das Problem beheben können.

Die Ursache für dieses Problem ist normalerweise eine Diskrepanz zwischen dem Spaltentyp in der Primärtabelle und der Fremdtabelle.

Das Problem kann auch durch eine Diskrepanz zwischen den Engine-Typen zweier Tabellen verursacht werden, z. B. MyISAM und InnoDB.

Dies ist auch aufgrund unterschiedlicher Sortierungen zwischen den Tabellen möglich, von denen eine UTF-8 und die andere latin1 verwendet.

Auf folgende Faktoren sollten Sie achten:

Engine : Jede Tabelle sollte mit derselben Datenbank-Engine konfiguriert werden, z. B. InnoDB.

Datentyp : In einer Tabelle sollten beide Spalten den gleichen datatype. int(11) datatype. int(11) “, während in einem anderen smallint(5) ein Problem verursacht.

Sortierung : Um die Kompatibilität zu gewährleisten, sollten beide Spaltenzeichensätze gleich sein, zB UTF8.

Achtung : Spalten können immer noch eine andere haben, auch wenn Ihre Tabellen dieselbe Sortierung haben.

Eindeutig : Fremdschlüssel sollten sich auf eindeutige Felder in der Referenztabelle beziehen, normalerweise primäre.

Ungisned : Es ist möglich, dass eine Tabelle unsignierte Schlüssel hat und eine andere keine unsignierten Schlüssel.

Wie behebt man den MySQL-Fehler „#1215 – Fremdschlüsselbeschränkung kann nicht hinzugefügt werden“ (4 Methoden)?

Nachdem wir die verschiedenen Ursachen dieser Fehlermeldung besprochen haben, sind wir zum nächsten Schritt übergegangen. Dieser Fehler muss behoben werden, also sehen wir uns an, wie das mit vier effektiven Methoden geht.

Methode 1: Überprüfen Sie die Tischverfügbarkeit

Um mit der Fehlerbehebung zu beginnen, können Sie prüfen, ob die Tabelle vorhanden ist, indem Sie den folgenden Befehl ausführen:

 show tables;

Aus diesem Code geht hervor, dass die Einschränkung erstellt werden konnte, da die Tabelle verfügbar war.

Methode 2: Stellen Sie sicher, dass die übergeordnete Tabelle InnoDB verwendet

Weitere Untersuchungen könnten durchgeführt werden, indem die auf die Datenbanktabelle eingestellte Speicher-Engine überprüft wird. Dazu kann folgender Befehl verwendet werden:

 SHOW CREATE TABLE parent

Das Ergebnis ist, dass Sie feststellen werden, dass InnoDB nicht die Speicher-Engine ist. Da ENGINE=MYISAM festgelegt wurde, können Sie die Speicher-Engine ändern, indem Sie den folgenden Befehl ausführen:

 ALTER TABLE parent ENGINE=INNODB;

Mit dieser Methode ist es endlich möglich, den Fehler zu beheben.

Methode 3: Überprüfen Sie, ob unangemessene Zitate vorhanden sind

Stellen Sie bei jeder FOREIGN KEY-Deklaration sicher, dass keine Anführungszeichen um Objektbezeichner eingefügt werden oder dass separate Anführungszeichen die Tabellen- und Spaltennamen umgeben.

Bei dieser Methode ist es notwendig, entweder nichts zu zitieren oder die Spalte und die Tabelle separat zu zitieren, um den Fehler zu beheben.

Methode 4: Überprüfen, ob der Schlüssel existiert oder nicht

Bei der Eingabe von MySQL-Befehlen ist darauf zu achten, dass der richtige Befehl eingegeben wird. Durch die Gegenprüfung wird sichergestellt, dass der Kunde keinen nicht vorhandenen Tabellenschlüssel in der Zieltabelle referenziert.

Daher ist es notwendig, die Kunden zu korrigieren, wie der Schlüssel auf dem Tisch zu verwenden ist. Es ist möglich, dass die für ON DELETE SET NULL verwendete Spalte in einigen Fällen keine Nulldefinition hat.

Um den MySQL-Fehler 1215 zu verhindern, müssen Sie sicherstellen, dass die Spalte auf den standardmäßigen Nullwert gesetzt ist.

Fazit

Dieser Artikel hat den Grund für den MySQL-Fehler „#1215 – Cannot Add Foreign Key Constraint“ erklärt, wie man die Ursache findet und wie man ihn mit vier effektiven Methoden behebt.

Vielen Dank, dass Sie sich die Zeit genommen haben, diesen Artikel zu lesen. Es ist uns eine Freude, es Ihnen zu präsentieren. Im Kommentarbereich posten Sie bitte Fragen oder Kommentare.

Bitte liken und folgen Sie unseren Facebook- und Twitter-Seiten, wenn Sie über die neuesten Nachrichten auf dem Laufenden bleiben möchten.