sql >> Databáze >  >> RDS >> Mysql

Kód chyby:1005. Nelze vytvořit tabulku „...“ (chyba:150)

Kód chyby:1005 – ve vašem kódu je nesprávný primární klíč

Obvykle je to kvůli odkazovanému poli cizího klíče, které neexistuje. Je možné, že máte překlep, nebo zkontrolujte případ, že by to mělo být stejné, nebo došlo k neshodě typu pole. Pole s cizím klíčem musí přesně odpovídat definicím.

Některé známé příčiny mohou být:

  1. Typ a/nebo velikost dvou klíčových polí se přesně neshodují. Pokud je například jeden INT(10) pole klíče musí být INT(10) také a ne INT(11) nebo TINYINT . Možná budete chtít potvrdit velikost pole pomocí SHOW CREATE TABLE protože Prohlížeč dotazů někdy vizuálně zobrazí pouze INTEGER pro oba INT(10) a INT(11) . Měli byste také zkontrolovat, zda jeden z nich není SIGNED a druhý je UNSIGNED . Oba musí být úplně stejní.
  2. Jedno z polí klíče, na které se pokoušíte odkazovat, nemá index a/nebo nejde o primární klíč. Pokud jedno z polí ve vztahu není primární klíč, musíte pro toto pole vytvořit index.
  3. Název cizího klíče je duplikátem již existujícího klíče. Zkontrolujte, zda je název vašeho cizího klíče v rámci vaší databáze jedinečný. Stačí přidat několik náhodných znaků na konec názvu klíče a otestovat to.
  4. Jedna nebo obě vaše tabulky jsou MyISAM stůl. Aby bylo možné používat cizí klíče, obě tabulky musí být InnoDB . (Ve skutečnosti, pokud jsou obě tabulky MyISAM pak se vám nezobrazí chybová zpráva – prostě se nevytvoří klíč.) V prohlížeči dotazů můžete určit typ tabulky.
  5. Zadali jste kaskádu ON DELETE SET NULL , ale příslušné pole klíče je nastaveno na NOT NULL . Můžete to opravit buď změnou kaskády, nebo nastavením pole tak, aby umožňovalo NULL hodnoty.
  6. Ujistěte se, že možnosti Charset a Collate jsou stejné jak na úrovni tabulky, tak na úrovni jednotlivých polí pro klíčové sloupce.
  7. Ve sloupci cizího klíče máte výchozí hodnotu (tj. default=0)
  8. Jedno z polí ve vztahu je součástí kombinačního (složeného) klíče a nemá svůj vlastní individuální index. I když má pole index jako součást složeného klíče, musíte vytvořit samostatný index pouze pro toto pole klíče, abyste jej mohli použít v omezení.
  9. Ve vašem ALTER máte chybu syntaxe nebo jste chybně zadali jeden z názvů polí ve vztahu
  10. Název vašeho cizího klíče přesahuje maximální délku 64 znaků.

Další podrobnosti naleznete na:Chyba MySQL číslo 1005 Nelze vytvořit tabulku



  1. SET TEXTSIZE Nefunguje v SQL Server? Koukni na tohle.

  2. MySQL dotaz citlivý na velká a malá písmena

  3. N-tý nejvyšší plat

  4. Kontrolní seznam shody SOx pro PostgreSQL