2011-03-13 8 views
2

이름이 "temp1" 인 테이블을 만듭니다.이 테이블에는 이름이 aa 인 기본 키와 다른 필드가 있습니다. 이름이 temp2 인 다른 테이블이 있습니다.외래 키를 추가하는 방법은 무엇입니까?

foreign keycc이라는 이름을 추가하고 싶습니다.

나는 코드 아래에 쓴하지만 약간의 오차가 있습니다

create table temp1 ( 
    aa int,  
    primary key(aa)  
); 

create table temp2 (
    bb int, 
    cc int, 
    primary key(bb), 
    foreign key(cc) references temp1 
); 

가이 오류가 ..하지만 :

can't create table 'temp.temp2'

temp 내 데이터베이스 이름입니다.

Edit: 

나는 (TEMP1에서 기본 키) AA에 데이터를 삽입하지만

CC (TEMP2에서 외래 키)로 가져올 수 없습니다.

왜?

내가 생각하는 경우 기본 키 삽입 데이터 그것은

외래 키에 자동으로 삽입!이 경우는 true? 이후

foreign key (cc) references temp1 (aa) 
만들기 테이블 문 내의

, 또는

alter table temp2 add foreign key (cc) references temp1 (aa) 

:

답변

5

당신은 당신은뿐만 아니라에 연결하고있는 외국 필드를 지정해야합니다. 또한 테이블 temp1에 대한 SQL에 결함이 있습니다. 기본 키를 만들 수있는 입력란이 없습니다. a - 질문에 오타가있는 것 같습니다. MySQL foreign key documentation에서

1

:

If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed.

가 쿼리를 검토, 그 정확 - 당신은 사용할 필요가 :

CREATE TABLE temp2 (
    bb int, 
    cc int, 
    PRIMARY KEY (bb), 
    FOREIGN KEY (cc) REFERENCES temp1(aa) 
); 

외래 키 제약을, 당신은 열을 외국를 지정해야 키는 부모 테이블과 관련이 있습니다. SQL은 기본 키 열을 원한다고 가정하지 않습니다. 다른 키가있을 수 있기 때문입니다.

0

코드가 유효합니다. 표준 SQL-92 구문.

온라인 Mimer SQL-92 Validator을 사용하여 테스트 할 수 있습니다.

당신은 SQL-92 사양, 11.8 "참조 제한 조건 정의"를 읽고이를 확인할 수는 2B) : 슬프게도

If the referenced table and columns does not specify a reference column list, then the table descriptor of the referenced table shall include a unique constraint that specifies PRIMARY KEY .

, MySQL은 SQL-92 호환되지이며 참조 열 목록이 보인다 필수.

관련 문제