2017-05-18 9 views
0

note에 외래 키 그룹을 추가 할 수없는 이유는 무엇입니까?두 개의 열로 구성된 외래 키를 추가 할 수없는 이유는 무엇입니까?

나는 Error Code: 1215. Cannot add foreign key constraint이됩니다. 이 show engine innodb status의 말씀입니다

create table student(
    id_student int auto_increment not null, 
    prenume varchar(255) not null, 
    nume varchar(255) not null, 
    constraint id_student_pk_STUDENT primary key(id_student)); 

create table materie(
    id_materie int auto_increment not null, 
    nume_materie varchar(255) not null, 
    constraint id_materie_pk_MATERIE primary key(id_materie)); 

create table inscris(
    id_student int not null, 
    id_materie int not null, 
    constraint id_student_fk_INSCRIS foreign key(id_student) references student(id_student), 
    constraint id_materie_fk_INSCRIS foreign key(id_materie) references materie(id_materie)); 

create table note(
    id_student int not null, 
    id_materie int not null, 
    nota int, 
    constraint fk_id_student_materie_NOTE foreign key(id_student, id_materie) references inscris(id_student, id_materie)); 

:

최신 FOREIGN KEY ERROR \ 없음 ------------------------ \ n2017 -05-18 19:44:21 0x700007362000 테이블 카탈로그/외래 키의 외래 키 제약 조건 오류 : \ n 외래 키 (id_student, id_materie) 참조 inscris (id_student, id_materie)) : \ n 참조 된 테이블에서 \ n 참조 된 열이 테이블의 첫 번째 열 또는 열 형식으로 나타나고 참조 된 테이블이 제약 조건과 일치하지 않습니다. \ nInTDB + 4.1.12로 만든 \ n 테이블에서 ENUM 및 SET의 내부 저장소 유형이 변경된 것을 확인하십시오. , 오래된 열의 열은 \ ncalu에서 참조 할 수 없습니다. 새 테이블의 mns. \ n 올바른 외래 키 정의는 http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html을 참조하십시오.

+1

가능한 중복 http://stackoverflow.com/questions/953035/multiple-column-foreign-key-in-mysql? – xQbert

+3

외래 키는 반드시 키를 참조해야합니다.'note'의 FK에서 참조 된 두 필드를 모두 포함하는'inscris' 인덱스를 추가해야합니다. 다른 FK는 단일 열이기 때문에가 아니라 참조 된 열이 인덱싱되기 때문에 작동합니다. – Uueerdo

+0

@ 우에에도 감사! 그랬어. –

답변

1

외래 키가 키를 참조해야하는 경우 메모의 FK에 참조 된 두 필드를 모두 포함하는 inscris에 색인을 추가해야합니다. 다른 FK는 단일 열이기 때문에가 아니라 참조 된 열이 인덱싱되기 때문에 작동합니다.

0

어쩌면이 대안이 문제를 피할 수 있습니다. inscris 테이블에 세 번째 열을 추가하고 세 번째 열을 기본 키로 만듭니다. 그런 다음 note 외래 키를 해당 기본 키 열로 참조하십시오.