2013-05-31 31 views
7

私は外部キーのコピーを追加しようとしているときに、MySQLのerrno 150を受け取ることに関する他の多くの記事を読んだことがあります。私は何か愚かなことをしていないことを願っています。私は簡単なテストケースを作った。MySQLでの外部キーの追加に失敗する(errno 150)

  1. どちらのテーブルもInnoDBです。
  2. どちらのテーブルもUTF-8です。
  3. どちらの列もint(11)符号なしです(color_idを NOT NULLとすることで違いはありません)。 編集:私はこのことについて間違っていた、これはSOLUTION WAS)

    ここでは私の二つの表のとおりです。

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. 

私は途方もなく愚かな何かをやっています?

答えて

24

color_idは、unsignedではなく、DEFAULT NULLです。列の型は同じでなければなりません。

+0

[OK]を、その質問に答えます - はい、私はばかげたばかげた。私は質問を掲示している間でも私が「署名なし」をチェックしたことを誓っているが、明らかにそうではなかった。どのように恥ずかしい。ありがとうございました。 – Raolin

+0

@ Raolin私たちの最高のことが起こります。少なくともあなたの質問はよく書かれていました。 – Kermit

+0

乾杯、私を助けました;) –

6

ほとんどの場合、プライマリキーと外部キーの間に型の不一致があります。

ほとんどのケースで助けるためにいくつかのヒント:

  • 関係しようとして表します面積は列が同一の型付けとゼロにしている場合はInnoDB
  • チェックなどのforeingキーをサポートしているエンジンを使用しているかどうかを確認し。例えば、(2つの列は型、型の大きさ、符号と一致しなければならない)
  • 目的の列にインデックスまたは主キーがあるかどうかをチェックする。
関連する問題