2017-04-22 17 views
0

最初のテーブルはLocationTimeテーブルで、2番目のテーブルはStudentテーブルです。 私は 'ALTER'を使用して外部キーを追加しています。しかし、私は以下のエラーがあります。エラーが発生するのはなぜですか?MySQL:外部キー制約を追加できません。エラー

+---------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+---------+-------------+------+-----+---------+-------+ 
| CourseN | varchar(3) | NO | PRI | NULL |  | 
| Quarter | varchar(11) | NO | PRI | NULL |  | 
| DayTime | varchar(7) | NO | PRI | NULL |  | 
| RoomN | varchar(3) | YES |  | NULL |  | 
+---------+-------------+------+-----+---------+-------+ 

+-------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-------------+-------------+------+-----+---------+-------+ 
| studentName | varchar(15) | NO | PRI | NULL |  | 
| CourseN  | varchar(3) | NO | PRI | NULL |  | 
| Quarter  | varchar(11) | NO | PRI | NULL |  | 
+-------------+-------------+------+-----+---------+-------+ 


ALTER TABLE Student 
ADD FOREIGN KEY (Quarter) REFERENCES LocationTime (Quarter) 
ON UPDATE CASCADE ON DELETE SET NULL; 

答えて

0

問題はQuarter複合キーCouresNQuarterDayTimeフォームのメンバーはLocationTimeの主キーであるという事実である外部キー制約エラーに追加することはできません。表)。 Quarterにのみ関連する別のテーブルに外部キー制約を宣言することはできません。複合キーの他の部分も含める必要があります。あなたの問題の1つの可能な解決策は、他の列を主キーとして宣言することです。さらに、主キーとして自動生成されたINT(IDENTITY)を持つ列、または自動生成されたGUIDを持つ列を使用しない理由はわかりません。

0

外部キーはCourseNとQuarterにありませんか? また、削除時に何かをNULLに設定することは、おそらくテーブルでヌル可能ではないと定義されています。

0

テーブルtable_2に存在しないテーブルtable_1INSERT a valueを入力しようとすると、エラーが発生します。

table_1フィールドに外部キーがあるので、table_2same valueが必要です。

non-working demoを参照してください。このデモでは、Codigoの値がFabricantesテーブルに存在しないため、エラーメッセージがスローされます。値がテーブルに最初にあることを示すworking demoがあります。

関連する問題