sql >> Databasteknik >  >> RDS >> Mysql

Felkod:1005. Kan inte skapa tabellen '...' (felnr:150)

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:

  1. De två nyckelfältens typ och/eller storlek matchar inte exakt. Till exempel, om en är INT(10) nyckelfältet måste vara INT(10) likaså och inte INT(11) eller TINYINT . Du kanske vill bekräfta fältstorleken med SHOW CREATE TABLE eftersom Query Browser ibland visuellt bara visar INTEGER för båda INT(10) och INT(11) . Du bör också kontrollera att en inte är SIGNED och den andra är UNSIGNED . Båda måste vara exakt likadana.
  2. 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.
  3. 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.
  4. En eller båda dina tabeller är en MyISAM tabell. För att kunna använda främmande nycklar måste tabellerna båda vara InnoDB . (Faktiskt, om båda tabellerna är MyISAM då får du inget felmeddelande - det skapar bara inte nyckeln.) I frågeläsaren kan du ange tabelltypen.
  5. 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åta NULL värden.
  6. Se till att alternativen för teckenuppsättning och sortering är desamma både på tabellnivå och på individuell fältnivå för nyckelkolumnerna.
  7. Du har ett standardvärde (det vill säga default=0) i kolumnen för din främmande nyckel
  8. 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.
  9. Du har ett syntaxfel i din ALTER eller så har du skrivit fel ett av fältnamnen i relationen
  10. 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



  1. Hur trunkerar man alla tabeller i en databas med TSQL?

  2. Vad förklarar PostgreSQL exakt för mig?

  3. Skaffa id för en infogning i samma uttalande

  4. Hur man gör enkelt CRUD med PHP och MySQL enkelt