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:
- 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ýtINT(10)také a neINT(11)neboTINYINT. Možná budete chtít potvrdit velikost pole pomocíSHOWCREATETABLEprotože Prohlížeč dotazů někdy vizuálně zobrazí pouzeINTEGERpro obaINT(10)aINT(11). Měli byste také zkontrolovat, zda jeden z nich neníSIGNEDa druhý jeUNSIGNED. Oba musí být úplně stejní. - 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.
- 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.
- Jedna nebo obě vaše tabulky jsou
MyISAMstůl. Aby bylo možné používat cizí klíče, obě tabulky musí býtInnoDB. (Ve skutečnosti, pokud jsou obě tabulkyMyISAMpak se vám nezobrazí chybová zpráva – prostě se nevytvoří klíč.) V prohlížeči dotazů můžete určit typ tabulky. - Zadali jste kaskádu
ONDELETESETNULL, ale příslušné pole klíče je nastaveno naNOTNULL. Můžete to opravit buď změnou kaskády, nebo nastavením pole tak, aby umožňovaloNULLhodnoty. - 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.
- Ve sloupci cizího klíče máte výchozí hodnotu (tj. default=0)
- 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í.
- Ve vašem
ALTERmáte chybu syntaxe nebo jste chybně zadali jeden z názvů polí ve vztahu - 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