2013-05-08 1 views
1

여기에 이상한 문제가 있습니다.MYSQL에서 외래 키가 있는지 확인하지 않습니다.

표 1 : 필드 degree_id의 값이하지 않는 경우 이제

create table course (course_id varchar(6) primary key , degree_id varchar(6) not null, course_name varchar(40) not null , foreign key (degree_id) references degree 
(degree_id)); 

까지 내가 SQL을 이해, 나는 물론 테이블에 값을 삽입 할 수 없습니다 : 2

create table degree (degree_id varchar(6) primary key , degree_name varchar(32) unique key , degree_abbr varchar(3)); 

표 학위 표에 존재합니다. 심지어 'ㅋ'하지만,

insert into course values('cor_001' , 'blah' , 'COURSE NAME'); 

이 쿼리가 성공적으로 실행 같은 것을 삽입하려고하면

는 그러나 유효한 degree_id하지 않습니다.

답변

3

아마도 외래 키를 지원하지 않는 MyISAM 테이블을 사용하고있을 것입니다. FK 지시문은 파싱되고 허용 된 다음 무시됩니다.

당신은 적절한 FK 지원을 위해 InnoDB 테이블을 사용할 필요가 : 당신이 show create table your_table을 할 경우, 당신은 엔진 타입이 출력의 끝 부분에 사용되는 볼 수

CREATE TABLE (...) ENGINE=InnoDB; 
        ^^^^^^^^^^^^^^ 

.

+0

네, 맞습니다. 이제 InnoDB를 사용하기 위해 어떻게 변경합니까? 나는 이미 많은 테이블을 생성하고 채웠다. 테이블을 떨어 뜨릴 수는 없어요. –

+0

'alter table yourtable engine = innodb'. FK 정의를 다시 적용하려면 테이블을 추가로 변경해야합니다. myisam이'create' 쿼리로 끝내면 잃어 버리게됩니다. –

+0

K. 그래서 먼저 모든 엔진을 변경 한 다음 외래 키를 적용하기 위해 테이블을 변경해야합니다. mysql의 기본 엔진을 변경하는 방법이 있습니까? 그래서 테이블을 만들 때마다 ENGINE 속성에 대해 언급 할 필요가 없습니다. –