L'ajout de Clé Étrangère Échoue dans MySQL (errno 150)
J'ai lu bien d'autres postes sur la réception de MySQL errno 150 lorsque vous essayez d'ajouter une clé étrangère copnstraint, cependant je n'ai pas trouvé de solution pour le moment. J'espère que je ne vais pas faire quelque chose de stupide. J'ai fait un simple test.
- Les deux tables InnoDB.
- Les deux tables sont en UTF-8.
- les Deux colonnes sont de type int(11) unsigned (prise de color_id
NOT NULL
ne fait pas de différence). (EDIT: je me suis trompé à CE SUJET, ET C'ÉTAIT LA SOLUTION)Voici mes deux tables:
Table widgets
:
CREATE TABLE `widgets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
`color_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Table colors
:
CREATE TABLE `colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Je viens de créer ces tables, il n'y a pas de contenu. Lorsque j'essaie d'ajouter une contrainte de clé étrangère pour relier les widgets.color_id de couleurs.id, ce qui se passe:
mysql> ALTER TABLE `widgets` ADD FOREIGN KEY (`color_id`) REFERENCES `color` (`id`);
ERROR 1005 (HY000): Can't create table 'production.#sql-7b1_2dd7' (errno: 150)
Je vais juste ajouter que je n'ai pas été en mesure d'utiliser mon outil de choix, Sequel Pro sous OSX -- soit. Je reçois le même message d'erreur lorsque vous essayez de créer une relation de clé étrangère.
SHOW ENGINE INNODB STATUS
retourne ceci:
130531 17:23:06 Error in foreign key constraint of table production/#sql-7b1_2c80:
FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`): Cannot find an index in
the referenced table where the referenced columns appear as the first columns,
or column types in the table and the referenced table do not match for constraint.
Suis-je en train de faire quelque chose de ridiculement stupide??
OriginalL'auteur Raolin | 2013-05-31
Vous devez vous connecter pour publier un commentaire.
color_id
n'est pasunsigned
et a unDEFAULT NULL
. Les types de colonne doivent être identiques.unsigned
alors que j'étais en affichant la question, mais évidemment je n'ai pas. Comment embarrassant. Je vous remercie.Il arrive aux meilleurs d'entre nous. Au moins, votre question est bien écrit.
Cheers mate, m'a beaucoup aidé 😉
Merci à toi! J'étais sur le point de publier sur stackoverflow jusqu'à ce que j'ai découvert que mon deuxième colonne n'a pas unisgned!
Heureux d'entendre et de bon travail sur la recherche de votre erreur.
OriginalL'auteur Kermit
Ses presque toujours un cas d'incompatibilité entre la clé primaire et la clé étrangère.
Quelques conseils pour vous aider dans la plupart des cas:
OriginalL'auteur rcdmk