みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ForeignKeyの作成方法について

MySQLでForeign Keyを作成しようと、以下のSQLを実行したところ、
テーブルは作成されず、エラーが発生しました。

エラーメッセージは
 Can't create table 'test.user' (errno: 150)
です。

また、
INDEX (CompanyID),
FOREIGN KEY (CompanyID) REFERENCES m_Company(CompanyID),
の2行を外すと通常通りテーブルは作成できます。
どうやったら、Foreign Keyを設定できるでしょうか。
テーブル作成後に、後付でForeign Keyを設定しようと心みましたが、
それも失敗しました。

--------------------------------------------------------
CREATE TABLE user (
`Seqno` int(11) NOT NULL AUTO_INCREMENT,
`UserID` varchar(8) NOT NULL DEFAULT '',
`Password` varchar(8) DEFAULT NULL,
`Mail` varchar(100) DEFAULT NULL,
`Valid` tinyint(4) DEFAULT NULL,
`CompanyID` int(11) DEFAULT NULL,
INDEX (CompanyID),
FOREIGN KEY (CompanyID) REFERENCES m_Company(CompanyID),
PRIMARY KEY (`Seqno`,`UserID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--------------------------------------------------------

投稿日時 - 2011-02-24 18:52:26

QNo.6547541

すぐに回答ほしいです

質問者が選んだベストアンサー

こんばんは。

情報が少ないです・・・。
m_CompanyはInnoDB?
CompanyIDの型(m_Companyの)は?
ここ見てください・・・。

http://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html

投稿日時 - 2011-02-24 21:56:31

補足

takaさん、ご返事ありがとうございます。
自己解決しました。
自分もtakaさんが教えてくれたページを見て、解決できました。
参照元のCompanyIDと参照先のCompanyIDで型の互換が取れていないのが問題でした。
一方では、参照キーにunsignedを設定してたんです。
マイナスの値はつかないし、いいかなーーって思ってたんです。
でも、もう一方にはつけてませんでした。
参照元と参照先のunsignedを省いたところ、うまくクエリを投げる事に成功しました。
ありがとうございます。


Corresponding columns in the foreign key and the referenced key must have similar
internal data types inside InnoDB so that they can be compared without a type conversion.
The size and sign of integer types must be the same. The length of string types need not be the same.
For nonbinary (character) string columns, the character set and collation must be the same.

投稿日時 - 2011-02-25 16:03:50

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問