2014-10-30 2 views
0

실패 현재 MySQL의 5.1/INNODB에 잘 작동 (목적에 간체) TABLE 문 CREATE 다음별도의 FOREIGN KEY 선언은

CREATE TABLE Employee ( 
    id INT NOT NULL PRIMARY KEY 
    ,boss INT REFERENCES Employee 
) 

가 지금은 DROP 표 직원을 실행 한 후 (별도로 FOREIGN KEY를 만들려고을) : 테이블 작성이 메시지와 함께 실패

CREATE TABLE Employee ( 
    id INT NOT NULL PRIMARY KEY 
    , boss INT 
    ,CONSTRAINT _FK_boss FOREIGN KEY(boss) REFERENCES Employee 
) 

이 시간이

"F를 추가 할 수 없습니다 oreign 키 제약 조건 ".

BTW : 나는 이미 DROP/CREATE DATABASE ...를 수행했으며, 제약 식별자 이름을 사용하여 전혀 성공하지 못했습니다. 명시 적으로 추가하면 "Engine innodb"도 도움이되지 않습니다. 내 원래 스키마에는 동일한 동작을 나타내는 2 개의 1 : n 관련 테이블이 있습니다.

내가 이해하는 한, http://dev.mysql.com/doc/refman/5.1/en/create-table.html 구문은 괜찮습니다.

+0

*** 사용하기 전에 사용하는 태그를 *** 읽어주십시오. 이것은 Microsoft SQL Server *와 아무런 관련이 없습니다. –

답변

0

외래 키 제약 열을 필요로합니다. 선택 사항이 아닙니다. 이 명령문은 선언이 성공하도록합니다.

CREATE TABLE Employee (
id INT NOT NULL PRIMARY KEY 
, boss INT 
,CONSTRAINT _FK_boss FOREIGN KEY(boss) REFERENCES Employee (id) 
); 
1

첫 번째 예는하지 작업을 했다. SHOW CREATE TABLE을 실행하면 제약 조건이 표시되지 않습니다.

MySQL은 인라인 외래 키 선언을 구문 분석하지만, InnoDB는이를 무시합니다. InnoDB는 테이블 수준의 제약 조건만을 지원합니다. 그리고 InnoDB는 표준 SQL이 선택 사항이라고하더라도 컬럼을 명시 적으로 선언 할 것을 요구합니다.

이것은 MySQL의 플러그 가능한 저장소 엔진 아키텍처의 아티팩트입니다. 스토리지 독립적 인 계층의 MySQL과 각 스토리지 엔진 계층은 모두 고유 한 SQL 구문 분석기를 사용하며 지원하는 표준 언어의 양에 동의하지 않을 수 있습니다. 또 다른 예는 MySQL에 의해 구문 분석되지만 모든 저장소 엔진에서 무시되는 CHECK 제약 조건입니다 (지금까지).