私は外部キーのコピーを追加しようとしているときに、MySQLのerrno 150を受け取ることに関する他の多くの記事を読んだことがあります。私は何か愚かなことをしていないことを願っています。私は簡単なテストケースを作った。MySQLでの外部キーの追加に失敗する(errno 150)
- どちらのテーブルもInnoDBです。
- どちらのテーブルもUTF-8です。
どちらの列もint(11)符号なしです(color_idを(編集:私はこのことについて間違っていた、これはSOLUTION WAS)NOT NULL
とすることで違いはありません)。ここでは私の二つの表のとおりです。
表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;
が表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;
Iこれらのテーブルを作成しただけでは、コンテンツはありません。私はcolors.idにwidgets.color_idリンクする外部キー制約を追加しようとすると、この問題が発生した:
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)
を私はちょうど私が好きな私のGUIツールを使用することができていないことを追加します - OSXのSequel Pro - どちらか。私は、外部キーの関係を作成しようとするときに同じエラーメッセージが表示されます。
SHOW ENGINE INNODB STATUS
戻り、この:
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.
私は途方もなく愚かな何かをやっています?
[OK]を、その質問に答えます - はい、私はばかげたばかげた。私は質問を掲示している間でも私が「署名なし」をチェックしたことを誓っているが、明らかにそうではなかった。どのように恥ずかしい。ありがとうございました。 – Raolin
@ Raolin私たちの最高のことが起こります。少なくともあなたの質問はよく書かれていました。 – Kermit
乾杯、私を助けました;) –