2014-03-05 2 views
0

데이터베이스 클래스 소개 소개 및 일부 외래 키 문제 발생. 몇 가지 외래 키를 만들었지 만 지금 당장 난처한 상황에 처하게되고 왜 작동하지 않는지 알 수 없습니다.외래 키 정의 문제 (MySQL)

이 예는 대학 데이터베이스 내가 섹션

describe section; 
+--------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+--------------+-------------+------+-----+---------+-------+ 
| course_id | varchar(7) | NO | PRI |   |  | 
| sec_id  | varchar(10) | NO | PRI |   |  | 
| semester  | varchar(10) | NO | PRI |   |  | 
| year   | int(11)  | NO | PRI | 0  |  | 
| building  | varchar(20) | YES | MUL | NULL |  | 
| room_no  | varchar(5) | YES |  | NULL |  | 
| time_slot_id | varchar(5) | YES | MUL | NULL |  | 
+--------------+-------------+------+-----+---------+-------+ 

나는 데이터베이스 걸리는 만들려고 가지고 IDcourse_id에 대한 외래 키를 만들 수 있어요,하지만, 다른 하나는 내가 아무튼 시도 작동하지 않습니다.

create table takes(
    ID int, 
    course_id varchar(7), 
    sec_id varchar(10), 
    semester varchar(10), 
    year int, 
    grade int, 
    primary key (course_id, sec_id, semester, year), 
    foreign key (ID) references student(ID) 
    on delete cascade on update cascade, 
    foreign key (course_id) references section(course_id) 
    on delete cascade on update cascade 
) engine = innodb; 

이 시점까지 작동합니다. 나는 시도하고이를 추가하는 경우, 그것은 나에게 errno: 150

foreign key (sec_id) 
    references section(sec_id) 
    on delete cascade on update cascade 

어떤 도움에 감사드립니다을 제공합니다. 나는 course_id을 위해 일했기 때문에 외래 키들에 대해 근본적으로 무언가를 놓치고 있을지도 모르지만, 완전히 똑같은 것처럼 보이는 sec_id을 생각하지 않았을까?

+0

을 당신은'errno를 참조 후 : 150'이 실행'SHOW의 ENGINE INNODB STATUS'합니다. 여기에는 새로운 외래 키 추가에 실패한 이유에 대한 정보가 들어 있습니다. –

답변

0

가능성 :

  1. 데이터 유형, 부호 포함 일치하지 않습니다.
  2. 부모 필드는 인덱싱되지 않습니다.

데이터 유형이 일치하는 경우 외래 키 관계를 정의하려는 상위 열에 인덱스를 정의하지 않은 것일 수 있습니다. 테이블 sectionsec_id 열에 인덱스가 정의되어 있는지 확인하십시오.

를 참조하십시오

0

확인 CHARACTER SET과 필드 모두의 COLLATION가 동일 함을 확인 즉, takes(sec_id)

section(sec_id)이 체크리스트를 참조하십시오 : http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/

+0

둘 다 같은 것처럼 보입니다. sec_id의 경우 정렬은 latin1_swedish_ci이고 연도의 경우는 NULL입니다. – user3381741

+0

'섹션'테이블의 엔진은 무엇입니까? 답변의 링크를 확인하십시오. – Deepak

+0

두 엔진 모두 innodb입니다. 지금 링크를 확인해보십시오, 감사합니다. – user3381741