2017-11-26 1 views
1

인 경우 첫 번째 삽입 문제를 처리하는 방법.외부 키가 자체 테이블에있는 경우 reforeign 키 자체가

/*外键是自己本身该如何处理插入问题*/ 
    create table if not exists Course(
    Cno varchar(10) primary key, 
    Cname varchar(100) not null, 
    Cpno varchar(10), 
    Ccredit tinyint, 

    foreign key (cpno) references course(cno) 
); 
/* the under sql will across error */ 
insert into Course(cno,cname,cpno,ccredit) value("1","数据库","5",4); 
insert into Course(cno,cname,cpno,ccredit) value("2","数学",null,2); 
insert into Course(cno,cname,cpno,ccredit) value("3","信息系统","1",4); 
insert into Course(cno,cname,cpno,ccredit) value("4","操作系统","6",3); 
insert into Course(cno,cname,cpno,ccredit) value("5","数据结构","7",4); 
insert into Course(cno,cname,cpno,ccredit) value("6","数据处理",null,2); 
insert into Course(cno,cname,cpno,ccredit) value("7","PASCAL语言","6",4); 

enter image description here 내가 MySQL과 테이블 과정을 초기화 할 수있는 방법 ?

답변

0

INSERT이 제 귀하 :

이 외래 키 (FK)로 정의 열의 값 5있는 행을 만들려고 시도
insert into Course(cno,cname,cpno,ccredit) value("1","数据库","5",4); 

있지만, 확인하지 않고 그 5cno 값 행 이미 존재 함. 따라서 FK 제약 조건은 삽입을 거부합니다.

세 가지 방법 중 하나로 해결할 수 있습니다.

먼저 cno 값을 사용하는 순서로 행을 삽입 한 후 사용하려면 cpno을 참조하십시오. 나는이 될 것이라고 생각 : 당신이 그래프 탐색 알고리즘은 루트 행 (널 cpno 값을 가진 행)로 시작하는 순서를 해결

2, 6, 7, 5, 1, 3, 4 

.

둘째, 삽입 전에이 명령에 SET FOREIGN_KEY_CHECKS=0;을 입력하여 외래 키 확인을 해제하십시오. 삽입 후이 명령을 사용하여 검사를 다시 활성화하십시오. SET FOREIGN_KEY_CHECKS=1;

셋째, 삽입하기 전에 테이블에서 외래 키 제약 조건을 삭제하십시오. 완료되면 다시 추가하십시오.

두 번째 두 가지 방법은 일반적으로 조용한 시스템에서 수행하는 대량 삽입 작업에만 적용됩니다. 데이터 무결성 보증의 가치가 있으므로 프로덕션에서 외부 키 확인을 사용하지 않으려는 경우는 거의 없습니다.

알아보기 How to temporarily disable a foreign key constraint in MySQL?

관련 문제