Fehlercode:1005 – Ihr Code enthält eine falsche Primärschlüsselreferenz
Normalerweise liegt es an einem referenzierten Fremdschlüsselfeld, das nicht existiert. Es könnte sein, dass Sie einen Tippfehler haben, oder überprüfen Sie, ob es gleich sein sollte, oder es gibt eine Nichtübereinstimmung des Feldtyps. Mit Fremdschlüsseln verknüpfte Felder müssen exakt mit den Definitionen übereinstimmen.
Einige bekannte Ursachen können sein:
- Der Typ und/oder die Größe der beiden Schlüsselfelder stimmen nicht genau überein. Zum Beispiel, wenn einer
INT(10)
ist das Schlüsselfeld mussINT(10)
sein sowie nichtINT(11)
oderTINYINT
. Sie können die Feldgröße mitSHOW
bestätigenCREATE
TABLE
da der Abfragebrowser manchmal nurINTEGER
visuell anzeigt für beideINT(10)
undINT(11)
. Sie sollten auch überprüfen, ob einer nichtSIGNED
ist und der andere istUNSIGNED
. Beide müssen genau gleich sein. - Eines der Schlüsselfelder, auf das Sie verweisen möchten, hat keinen Index und/oder ist kein Primärschlüssel. Wenn eines der Felder in der Beziehung kein Primärschlüssel ist, müssen Sie einen Index für dieses Feld erstellen.
- Der Fremdschlüsselname ist ein Duplikat eines bereits existierenden Schlüssels. Überprüfen Sie, ob der Name Ihres Fremdschlüssels innerhalb Ihrer Datenbank eindeutig ist. Fügen Sie einfach ein paar zufällige Zeichen am Ende Ihres Schlüsselnamens hinzu, um dies zu testen.
- Eine oder beide Ihrer Tabellen ist ein
MyISAM
Tisch. Um Fremdschlüssel verwenden zu können, müssen die Tabellen beideInnoDB
sein . (Eigentlich, wenn beide TabellenMyISAM
sind dann erhalten Sie keine Fehlermeldung – der Schlüssel wird einfach nicht erstellt.) Im Abfrage-Browser können Sie den Tabellentyp angeben. - Sie haben eine Kaskade
ON
angegebenDELETE
SET
NULL
, aber das relevante Schlüsselfeld ist aufNOT
gesetztNULL
. Sie können dies beheben, indem Sie entweder Ihre Kaskade ändern oder das Feld so einstellen, dass esNULL
zulässt Werte. - Stellen Sie sicher, dass die Optionen Charset und Collate sowohl auf Tabellenebene als auch auf individueller Feldebene für die Schlüsselspalten gleich sind.
- Sie haben einen Standardwert (d. h. default=0) in Ihrer Fremdschlüsselspalte
- Eines der Felder in der Beziehung ist Teil eines kombinierten (zusammengesetzten) Schlüssels und hat keinen eigenen individuellen Index. Auch wenn das Feld einen Index als Teil des zusammengesetzten Schlüssels hat, müssen Sie einen separaten Index nur für dieses Schlüsselfeld erstellen, um es in einer Einschränkung zu verwenden.
- Sie haben einen Syntaxfehler in Ihrem
ALTER
-Anweisung oder Sie haben sich bei einem der Feldnamen in der Beziehung vertippt - Der Name Ihres Fremdschlüssels überschreitet die maximale Länge von 64 Zeichen.
Weitere Einzelheiten finden Sie unter:MySQL-Fehlernummer 1005 Tabelle kann nicht erstellt werden