Code d'erreur :1005 -- il y a une mauvaise référence de clé primaire dans votre code
Cela est généralement dû à un champ de clé étrangère référencé qui n'existe pas. Il se peut que vous ayez une erreur de frappe, ou vérifiez que la casse devrait être la même, ou il y a une incompatibilité de type de champ. Les champs liés à une clé étrangère doivent correspondre exactement aux définitions.
Certaines causes connues peuvent être :
- Le type et/ou la taille des deux champs clés ne correspondent pas exactement. Par exemple, si l'un est
INT(10)
le champ clé doit êtreINT(10)
ainsi et nonINT(11)
ouTINYINT
. Vous pouvez confirmer la taille du champ en utilisantSHOW
CREATE
TABLE
car le navigateur de requêtes affichera parfois uniquementINTEGER
pour les deuxINT(10)
etINT(11)
. Vous devez également vérifier qu'il n'est pasSIGNED
et l'autre estUNSIGNED
. Ils doivent tous deux être exactement identiques. - L'un des champs clés que vous essayez de référencer n'a pas d'index et/ou n'est pas une clé primaire. Si l'un des champs de la relation n'est pas une clé primaire, vous devez créer un index pour ce champ.
- Le nom de la clé étrangère est un doublon d'une clé déjà existante. Vérifiez que le nom de votre clé étrangère est unique dans votre base de données. Ajoutez simplement quelques caractères aléatoires à la fin de votre nom de clé pour tester cela.
- Une ou les deux de vos tables est un
MyISAM
table. Pour utiliser des clés étrangères, les tables doivent toutes deux êtreInnoDB
. (En fait, si les deux tables sontMyISAM
vous n'obtiendrez pas de message d'erreur ; la clé ne sera tout simplement pas créée.) Dans le navigateur de requêtes, vous pouvez spécifier le type de table. - Vous avez spécifié une cascade
ON
DELETE
SET
NULL
, mais le champ clé correspondant est défini surNOT
NULL
. Vous pouvez résoudre ce problème en modifiant votre cascade ou en définissant le champ pour autoriserNULL
valeurs. - Assurez-vous que les options Charset et Assembler sont les mêmes au niveau de la table ainsi qu'au niveau des champs individuels pour les colonnes clés.
- Vous avez une valeur par défaut (c'est-à-dire, default=0) sur votre colonne de clé étrangère
- L'un des champs de la relation fait partie d'une clé combinée (composite) et n'a pas son propre index individuel. Même si le champ a un index dans le cadre de la clé composite, vous devez créer un index séparé uniquement pour ce champ clé afin de l'utiliser dans une contrainte.
- Vous avez une erreur de syntaxe dans votre
ALTER
déclaration ou vous avez mal saisi l'un des noms de champ dans la relation - Le nom de votre clé étrangère dépasse la longueur maximale de 64 caractères.
Pour plus de détails, consultez :Erreur MySQL numéro 1005 Impossible de créer la table