2017-02-19 14 views
-2

私は、列が自動インクリメントする別のテーブルを指す外部キーであるMySQLデータベースを設定しようとしています。私は、外部キーを持つテーブルを作成しようとすると、私は次のエラーを取得する:autoincrement intを指すように外部キーを設定する方法は?

Can't create table '{DATABASE}' . '{TABLE}' (errorno: 150 "Foreign key constraint is incorrectly formed") 

答えはfound here問題は、私はを指す外部キーとして、通常のint型を設定しようとしていますということができることを言いますオートインクリメントint。テーブル構造を設定するにはどうすればいいですか? test_idのINT NOT、)

がテーブルtest_scores(IDのINT NOT NULL AUTO_INCREMENT、 STUDENT_IDのINT、 FOREIGN KEY(IDを作成DELETE CASCADE ON)学生(STUDENT_IDを参照しています。ここ

はエラーを生成文ですNULL、 FOREIGN KEY(test_id)REFERENCESテスト(ID)DELUST CASCADE、 スコアINT NOT NULL、 PRIMARY KEY(id));

親テーブル:この行で

students 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 


tests 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
+0

このエラーを生成するコードはなんですか?自動増分フィールドには何も特別なものはありません。整数は、どこから来るかにかかわらず整数です。 – David

+0

私は上記のステートメントを追加しました。 –

+0

どの外部キーがエラーを生成しますか?キーのターゲット表はどのように見えますか?一見すると、このテーブルの主キーを外部キーにするようにしているように見えますが、それは本当に必要ですか?このテーブルに挿入されている特定のレコードが、生成しようとしている「id」が他のテーブルにマップされることを、どのように知っていますか? – David

答えて

1

FOREIGN KEY (id) REFERENCES students(student_id) ON DELETE CASCADE, 

あなたはおそらくこれを行うためのもの:

FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE, 

そうしないと、id外部キーを作成しようとしていますあなたが何であるかを知ることができないので、動作しないでしょうid gは、レコードを挿入するまでです。さらにstudentsにはstudent_idという列がないため、外部キーの関係として使用しようとすると失敗します。

関連する問題