Felkod:1005 -- det finns en felaktig primärnyckelreferens i din kod
Vanligtvis beror det på ett refererat främmande nyckelfält som inte existerar. Det kan vara att du har ett stavfel, eller kryssa av för att det borde vara samma, eller så finns det en fälttypsfel. Utländska nyckellänkade fält måste matcha definitionerna exakt.
Några kända orsaker kan vara:
- De två nyckelfältens typ och/eller storlek matchar inte exakt. Till exempel, om en är
INT(10)
nyckelfältet måste varaINT(10)
likaså och inteINT(11)
ellerTINYINT
. Du kanske vill bekräfta fältstorleken medSHOW
CREATE
TABLE
eftersom Query Browser ibland visuellt bara visarINTEGER
för bådaINT(10)
ochINT(11)
. Du bör också kontrollera att en inte ärSIGNED
och den andra ärUNSIGNED
. Båda måste vara exakt likadana. - Ett av nyckelfälten som du försöker referera till har inget index och/eller är inte en primärnyckel. Om ett av fälten i relationen inte är en primärnyckel måste du skapa ett index för det fältet.
- Namnet på den främmande nyckeln är en dubblett av en redan befintlig nyckel. Kontrollera att namnet på din främmande nyckel är unikt i din databas. Lägg bara till några slumpmässiga tecken i slutet av ditt nyckelnamn för att testa detta.
- En eller båda dina tabeller är en
MyISAM
tabell. För att kunna använda främmande nycklar måste tabellerna båda varaInnoDB
. (Faktiskt, om båda tabellerna ärMyISAM
då får du inget felmeddelande - det skapar bara inte nyckeln.) I frågeläsaren kan du ange tabelltypen. - Du har angett en kaskad
ON
DELETE
SET
NULL
, men det relevanta nyckelfältet är inställt påNOT
NULL
. Du kan fixa detta genom att antingen ändra din kaskad eller ställa in fältet för att tillåtaNULL
värden. - Se till att alternativen för teckenuppsättning och sortering är desamma både på tabellnivå och på individuell fältnivå för nyckelkolumnerna.
- Du har ett standardvärde (det vill säga default=0) i kolumnen för din främmande nyckel
- Ett av fälten i relationen är en del av en kombinationsnyckel (sammansatt) och har inte ett eget individuellt index. Även om fältet har ett index som en del av den sammansatta nyckeln, måste du skapa ett separat index för endast det nyckelfältet för att kunna använda det i en begränsning.
- Du har ett syntaxfel i din
ALTER
eller så har du skrivit fel ett av fältnamnen i relationen - Namnet på din främmande nyckel överskrider den maximala längden på 64 tecken.
För mer information, se:MySQL-felnummer 1005 Kan inte skapa tabell