sql >> Database >  >> RDS >> Mysql

Foutcode:1005. Kan tabel '...' niet maken (fout:150)

Foutcode:1005 -- er is een verkeerde primaire sleutelreferentie in uw code

Meestal is dit te wijten aan een veld met een refererende sleutel waarnaar wordt verwezen dat niet bestaat. Het kan zijn dat u een typefout heeft gemaakt, of controleer of het hetzelfde zou moeten zijn, of er is een veldtype dat niet overeenkomt. Foreign key-linked velden moeten exact overeenkomen met de definities.

Enkele bekende oorzaken kunnen zijn:

  1. De twee sleutelvelden type en/of grootte komen niet exact overeen. Als één bijvoorbeeld INT(10) . is het sleutelveld moet INT(10) . zijn ook en niet INT(11) of TINYINT . U kunt de veldgrootte bevestigen met SHOW CREATE TABLE omdat de Query-browser soms slechts INTEGER laat zien voor beide INT(10) en INT(11) . Je moet ook controleren of er een niet is SIGNED en de andere is UNSIGNED . Ze moeten allebei precies hetzelfde zijn.
  2. Een van de sleutelvelden waarnaar u probeert te verwijzen, heeft geen index en/of is geen primaire sleutel. Als een van de velden in de relatie geen primaire sleutel is, moet u een index voor dat veld maken.
  3. De naam van de refererende sleutel is een duplicaat van een reeds bestaande sleutel. Controleer of de naam van uw refererende sleutel uniek is binnen uw database. Voeg gewoon een paar willekeurige tekens toe aan het einde van uw sleutelnaam om dit te testen.
  4. Een of beide van uw tabellen is een MyISAM tafel. Om buitenlandse sleutels te gebruiken, moeten de tabellen beide InnoDB . zijn . (Eigenlijk, als beide tabellen MyISAM zijn dan krijg je geen foutmelding - het maakt alleen geen sleutel.) In Query Browser kun je het tabeltype specificeren.
  5. U heeft een cascade ON . gespecificeerd DELETE SET NULL , maar het relevante sleutelveld is ingesteld op NOT NULL . U kunt dit oplossen door ofwel uw cascade te wijzigen of het veld zo in te stellen dat NULL . wordt toegestaan waarden.
  6. Zorg ervoor dat de opties Tekenset en Sorteren hetzelfde zijn, zowel op tabelniveau als op individueel veldniveau voor de sleutelkolommen.
  7. U heeft een standaardwaarde (dat wil zeggen, default=0) in uw externe sleutelkolom
  8. Een van de velden in de relatie maakt deel uit van een combinatie (samengestelde) sleutel en heeft geen eigen individuele index. Hoewel het veld een index heeft als onderdeel van de samengestelde sleutel, moet u een aparte index maken voor alleen dat sleutelveld om het in een beperking te kunnen gebruiken.
  9. Je hebt een syntaxisfout in je ALTER statement of je hebt een van de veldnamen in de relatie verkeerd getypt
  10. De naam van uw externe sleutel overschrijdt de maximale lengte van 64 tekens.

Raadpleeg voor meer informatie:MySQL-foutnummer 1005 Kan tabel niet maken



  1. Voorbeelden van het converteren van 'date' naar 'datetime' in SQL Server (T-SQL)

  2. MySQLDumper:een op PHP en Perl gebaseerde MySQL-databaseback-uptool

  3. Overdenkingen over SQL Server-beveiliging

  4. Eenvoudige parametrering en triviale plannen - deel 3