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íSHOW
CREATE
TABLE
protože Prohlížeč dotazů někdy vizuálně zobrazí pouzeINTEGER
pro obaINT(10)
aINT(11)
. Měli byste také zkontrolovat, zda jeden z nich neníSIGNED
a 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
MyISAM
stůl. Aby bylo možné používat cizí klíče, obě tabulky musí býtInnoDB
. (Ve skutečnosti, pokud jsou obě tabulkyMyISAM
pak 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
ON
DELETE
SET
NULL
, ale příslušné pole klíče je nastaveno naNOT
NULL
. Můžete to opravit buď změnou kaskády, nebo nastavením pole tak, aby umožňovaloNULL
hodnoty. - 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
ALTER
má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