Fejlkode:1005 -- der er en forkert primær nøglereference i din kode
Normalt er det på grund af et refereret fremmednøglefelt, som ikke eksisterer. Det kan være, at du har en tastefejl, eller at det skal være det samme, eller at der er en fejltype i felten. Udenlandske nøgle-linkede felter skal matche definitionerne nøjagtigt.
Nogle kendte årsager kan være:
- De to nøglefelters type og/eller størrelse matcher ikke nøjagtigt. For eksempel, hvis en er
INT(10)
nøglefeltet skal væreINT(10)
ligeså og ikkeINT(11)
ellerTINYINT
. Du ønsker måske at bekræfte feltstørrelsen ved at brugeSHOW
CREATE
TABLE
fordi forespørgselsbrowser nogle gange visuelt kun viserINTEGER
for beggeINT(10)
ogINT(11)
. Du bør også kontrollere, at en ikke erSIGNED
og den anden erUNSIGNED
. De skal begge være nøjagtigt ens. - Et af nøglefelterne, som du forsøger at henvise til, har ikke et indeks og/eller er ikke en primær nøgle. Hvis et af felterne i relationen ikke er en primær nøgle, skal du oprette et indeks for det felt.
- Det fremmede nøglenavn er et duplikat af en allerede eksisterende nøgle. Tjek, at navnet på din fremmednøgle er unikt i din database. Du skal blot tilføje et par tilfældige tegn til slutningen af dit nøglenavn for at teste for dette.
- En eller begge dine tabeller er en
MyISAM
bord. For at bruge fremmednøgler skal tabellerne begge væreInnoDB
. (Faktisk, hvis begge tabeller erMyISAM
så får du ikke en fejlmeddelelse - den vil bare ikke oprette nøglen.) I forespørgselsbrowseren kan du angive tabeltypen. - Du har angivet en kaskade
ON
DELETE
SET
NULL
, men det relevante nøglefelt er sat tilNOT
NULL
. Du kan rette dette ved enten at ændre din kaskade eller indstille feltet til at tilladeNULL
værdier. - Sørg for, at Charset og Collate-indstillingerne er de samme både på tabelniveau og individuelt feltniveau for nøglekolonnerne.
- Du har en standardværdi (det vil sige default=0) på din fremmednøglekolonne
- Et af felterne i relationen er en del af en kombinationsnøgle (sammensat) og har ikke sit eget individuelle indeks. Selvom feltet har et indeks som en del af den sammensatte nøgle, skal du oprette et separat indeks for kun det nøglefelt for at bruge det i en begrænsning.
- Du har en syntaksfejl i din
ALTER
sætning eller du har skrevet forkert et af feltnavnene i relationen - Navnet på din fremmednøgle overskrider den maksimale længde på 64 tegn.
For flere detaljer, se:MySQL-fejlnummer 1005 Kan ikke oprette tabel