2012-09-16 2 views
1

안녕하십니까, 기본 키와 외래 키가있는 테이블을 만들고 싶습니다. 그러나 외래 키는 동일한 테이블의 기본 키를 참조합니다. 나는 온라인을 읽고 이런 제약 조건을 추가하기 위해 먼저이 제약 조건을 없애고 데이터를로드 한 다음 ALTER 명령을 사용하여 제약 조건을 추가해야한다고 알았습니다. 그러나 이것은 효과가없는 것 같습니다. 다음은 쿼리 :같은 테이블의 기본 키를 참조하는 외래 키 제약 조건을 추가하는 방법 (자체 참조)

DROP TABLE employee; 
CREATE TABLE employee (
    fname varchar(15) not null, 
    minit varchar(1), 
    lname varchar(15) not null, 
    ssn  char(9), 
    bdate date, 
    address varchar(50), 
    sex  char, 
    salary decimal(10,2), 
    superssn char(9), 
    dno  integer(4), 
    primary key (ssn), 
    foreign key (superssn) references employee(ssn), 
    foreign key (dno) references department(dnumber) 
); 

이 나는 ​​테이블에 데이터를로드하는 방법입니다.

LOAD DATA LOCAL INFILE "employee.dat" 
INTO TABLE employee 
FIELDS ENCLOSED BY "\"" TERMINATED BY "," 
; 

이 작업을 수행하는 방법에 대한 힌트를 제공해 주시면 대단히 감사하겠습니다.

+1

무엇이 작동하지 않습니까? 제약 조건이 적용되는 동안 데이터를로드 할 수없는 이유는 행이 생성 될 때 부모가 항상 존재하도록 입력 행을 정렬하지 않으면 (대부분의 데이터 세트에서는 어렵거나 거의 없을 것입니다) 존재하지 않는 상위 행에 대한 키 위]. 위의 'CREATE TABLE'에는 제약 조건이 포함되어 있습니다. FK 제약없이 테이블을 생성하고 데이터를로드 한 다음 ALTER TABLE으로 추가하십시오. –

+0

Michael, 오류 코드 1452가 발생합니다. NULL 인 외래 키 열에 값이 있습니다. 이것이 어떤 문제를 일으킬 지 모르겠습니다. – Stranger

+0

왜 트리거를 사용하지 않습니까? – Kermit

답변

0

가능한 첫 번째 답변 :

DROP TABLE employee; 

CREATE TABLE employee (
    fname varchar(15) not null, 
    minit varchar(1), 
    lname varchar(15) not null, 
    ssn  char(9), 
    bdate date, 
    address varchar(50), 
    sex  char, 
    salary decimal(10,2), 
    superssn char(9), 
    dno  integer(4), 
    primary key (ssn), 
    foreign key (dno) references department(dnumber) 
) ENGINE = InnoDB; 

LOAD DATA LOCAL INFILE "employee.dat" 
INTO TABLE employee 
FIELDS ENCLOSED BY "\"" TERMINATED BY ","; 

ALTER TABLE employee ADD FOREIGN KEY (superssn) REFERENCES employee(ssn); 

나는 설정 (작동하지 않았다) 당신은 외국 키를 사용하고자하는 경우 필요 이노에 테이블 엔진 형식을 설정하는 테이블 쿼리를 작성합니다.

가능한 두 번째 답변 :

그것은 쿼리의 집합 점에 유의하는 것이 중요합니다, 데이터 삽입이 필요하지 나는 오류를 생성하지 않고 내 개발 MySQL 서버에이 두 쿼리를 실행할 수이었다. 부서 표에 FK를 추가해야합니다.

CREATE TABLE `test_schema`.`employees` (
    `fname` VARCHAR(15) NOT NULL , 
    `minit` VARCHAR(1) NULL , 
    `lname` VARCHAR(15) NOT NULL , 
    `ssn` CHAR(9) NOT NULL , 
    `bdate` DATE NULL , 
    `address` VARCHAR(50) NULL , 
    `sex` CHAR NULL , 
    `salary` DECIMAL(10,2) NULL , 
    `superssn` CHAR(9) NULL , 
    `dno` INT(4) NULL , 
    PRIMARY KEY (`ssn`)) ENGINE = InnoDB; 

ALTER TABLE `test_schema`.`employees` 
    ADD CONSTRAINT `superssn` 
    FOREIGN KEY (`superssn`) 
    REFERENCES `test_schema`.`employees` (`ssn`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
, ADD INDEX `superssn_idx1` (`superssn` ASC) ; 
+0

도움을 주셔서 감사하지만 당신이 제안한 정확히 내가 전에 시도한이 오류 메시지가 있어요 : 오류 코드 1452 : 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패합니다. 그래서 첫 번째 테이블 생성 쿼리를 실행 한 다음 데이터를 추가했습니다.하지만 제약 조건을 입력하려고 할 때 오류가 발생했습니다. – Stranger

+0

좋습니다. 첫 번째 CREATE에서 FK 관계를 제거했는지 확인하고 싶습니다. 성명서. 내 대답을 편집하여 다른 것을 시도 할 수 있습니다. –

+0

예, 원본 쿼리에서 Fk 관계를 제거했습니다. 나중에 ALTER를 사용하여 추가했지만 작동하지 않았습니다. 나는 "가능한 두 번째 답변"을 시도하지 않았습니다. 내가 해줄거야. 지금까지 도움을 주셔서 감사합니다. – Stranger

관련 문제