2011-12-13 21 views
0

MySQL Workbenchを使用して外部キーを追加しようとしています。私は新しいテーブルを作成し、外部キータブをクリックし、列を表示します。しかし、チェックボックスは有効になっていません。列は両方のテーブルのINTデータ型です。何が間違っているかも示唆していただけますか?私はどんな助けにも感謝します。両方の列がタイプINTであるがmysqlに外部キーを追加できませんでした

CREATE TABLE `temp_table1` (
    `t_id` int(10) unsigned NOT NULL, 
    `t_name` varchar(45) default NULL, 
    PRIMARY KEY (`t_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 


CREATE TABLE `new_table` (
    `newid` int(11) NOT NULL, 
    `t_id` int(10) NOT NULL, 
    PRIMARY KEY (`newid`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 
+0

は、参照されているテーブルの主キーの列ですか?実際のスキーマを表示すると便利です。 – stew

+0

はい、プライマリキーです。 – nav100

+0

テーブルに使用しているストレージエンジンは何ですか? InnoDBは、外部キー制約をサポートする*唯一の* MySQLストレージエンジンであることに注意してください。 (http://dev.mysql.com/doc/refman/5.6/en/ansi-diff-foreign-keys.htmlを参照してください) – ruakh

答えて

3

は、それらのいずれもunsignedあります。外部キーを確立するには、両方ともunsignedでなければなりません。

CREATE TABLE `temp_table1` (
    `t_id` int(10) unsigned NOT NULL, 
    `t_name` varchar(45) default NULL, 
    PRIMARY KEY (`t_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 


CREATE TABLE `new_table` (
    `newid` int(11) NOT NULL, 
    `t_id` int(10) unsigned NOT NULL, 
    --------------^^^^^^^^^^ 
    -- Must be unsigned... 
    PRIMARY KEY (`newid`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ 
+0

マイケルに感謝します。あなたが正しいです! – nav100

0

外部キーは、参照する列と同じ型である必要があります。外部キーを使用してテーブルのt_idを符号なしにする必要があります。

関連する問題