2017-04-22 2 views
0

첫 번째 테이블은 LocationTime 테이블이고 두 ​​번째 테이블은 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복합 키 (CouresN, QuarterDayTime 형태의 회원이 LocationTime에 대한 기본 키는 사실이다 외래 키 제약 조건 오류를 추가 할 수 없습니다 표). Quarter과 관련된 다른 테이블에 외래 키 제약 조건을 선언 할 수 없으며 복합 키의 다른 부분도 포함해야합니다. 다른 컬럼을 기본 키로 선언하는 것이 가능한 한 가지 가능한 솔루션입니다. 또한 기본 키로 자동 생성 된 INT (IDENTITY)가있는 열이나 자동 생성 GUID가있는 열을 사용하지 않는 이유는 알 수 없습니다.

0

외부 키가 CourseN 및 Quarter에 있어야하지 않습니까? 또한 테이블에 nullable이 아닌 것으로 정의 된 delete에서 무언가를 NULL로 설정하는 것은 효과가 없을 것입니다!

0

INSERT a value 테이블에 테이블에 존재하지 않는 table_1 테이블을 만들려고하면 오류가 발생합니다.

table_1 필드에 외래 키가 있으므로 table_2same value이 있어야합니다.

non-working demo을 참조하십시오. 이 데모에서는 Codigo의 값이 Fabricantes 테이블에 존재하지 않으므로 오류 메시지가 throw됩니다. 다음은 값이 테이블에 처음 있음을 나타내는 working demo입니다.

관련 문제