2017-06-24 43 views
-2

このスレッドは私の質問と同様です How to Link Foreign Key with Different Name しかし残念ながら、答えでは、私の問題は解決されませんでした。私のテーブルの例では、プライマリキーは作成されません。すべての外部キーのみ。2つのテーブルの列に同じ外部キーを使用

CREATE TABLE ref_data(
user_id INT(11) NOT NULL, 
ref_id INT(11) NOT NULL, 
ref_name VARCHAR(30) NOT NULL, 
ref_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
CONSTRAINT FK_user_id FOREIGN KEY(user_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_id FOREIGN KEY(ref_id) REFERENCES client (user_id), 
CONSTRAINT FK_ref_name FOREIGN KEY(ref_name) REFERENCES client (firstname) 
); 

それは私与えます:ここで

はコードである

にerrno:150ここで

私は2回をuser_idを使用しています "外部キー制約が正しく形成されています" firstが "user_id"として2番目が "ref_id"になりました。 first_nameを "ref_name"としても使用します。

クライアントテーブル:

CREATE TABLE client (
    `user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `username` VARCHAR(30) NOT NULL UNIQUE KEY, 
    `email` VARCHAR(50) NOT NULL UNIQUE KEY, 
    `firstname` VARCHAR(30) NOT NULL, 
    `lastname` VARCHAR(30) NOT NULL, 
    `password` CHAR(128) NOT NULL 
); 
+0

詳細については、そのエラーが発生した後で 'SHOW ENGINE InnoDB STATUS'を実行することができます。 –

+0

私はそれを実行します: =================== 2017-07- 13 ... – mimi

+0

確かに、それは外部キーエラーの直後にチェックされましたか? –

答えて

2

[OK]を、ref_dataテーブルを作成しようとしたときに、外部キーエラーの後、私はこれを参照してください。

LATEST FOREIGN KEY ERRORを

- ---------------------- 2017-07-13 01:07:00 37ecテーブルref_dataの外部キー制約のエラー:

FOREIGN KEY(ref_name)REFERENCESクライアント(FIRSTNAME)):

が参照される列は、テーブル内の最初の 列、または列のタイプとして表示されます 参照されるテーブルのインデックスと参照先テーブルません を見つけることができません制約と一致する。 ENUMの内部ストレージタイプと SETは、> = InnoDB-4.1.12で作成されたテーブルで変更され、古いテーブル内のそのようなカラム は、新しいテーブルのそのようなカラムでは参照できません。正しい外部キー定義については、 http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html を参照してください。テーブル 'testを作成します。 ref_data ' 外部キー制約が失敗しました。 参照テーブルにはインデックスがありません。参照先の列には、最初の の列としてが表示され、 'FOREIGN KEY(ref_name)REFERENCESクライアント(ファーストネーム)'の近くに表示されます。 (太字で)

のREFERENCES句後の「クライアント」テーブルのための「ファーストネーム」には、インデックス(部分はありません:そのエラーは基本的に言っている何

FOREIGN KEY

しかし、それは簡単な修正ですクライアントテーブルの上にこのSQLを実行します。

ALTER TABLE `client` ADD INDEX(`firstname`); 

... ref_dataテーブルSQLを再度実行します。

+0

それはちょうど働いた!私に新しいレッスンを教えてくれてありがとう。 – mimi

関連する問題