Mysql
 sql >> Base de données >  >> RDS >> Mysql

Code d'erreur :1005. Impossible de créer la table '...' (errno :150)

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 :

  1. 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 être INT(10) ainsi et non INT(11) ou TINYINT . Vous pouvez confirmer la taille du champ en utilisant SHOW CREATE TABLE car le navigateur de requêtes affichera parfois uniquement INTEGER pour les deux INT(10) et INT(11) . Vous devez également vérifier qu'il n'est pas SIGNED et l'autre est UNSIGNED . Ils doivent tous deux être exactement identiques.
  2. 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.
  3. 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.
  4. Une ou les deux de vos tables est un MyISAM table. Pour utiliser des clés étrangères, les tables doivent toutes deux être InnoDB . (En fait, si les deux tables sont MyISAM 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.
  5. Vous avez spécifié une cascade ON DELETE SET NULL , mais le champ clé correspondant est défini sur NOT NULL . Vous pouvez résoudre ce problème en modifiant votre cascade ou en définissant le champ pour autoriser NULL valeurs.
  6. 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.
  7. Vous avez une valeur par défaut (c'est-à-dire, default=0) sur votre colonne de clé étrangère
  8. 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.
  9. 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
  10. 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