2010-02-24 2 views
3

다른 테이블에 조인하는 외래 키로 하나의 컬럼이있는 테이블이 있습니다. Fixtures라는 테이블과 Inning이라는 테이블이있는 곳은 크리켓 질문입니다.외래 키로 데이터 입력을 중단하지 않습니다. MySQL

이닝 테이블에는 조명기 테이블과 관련된 FixtureId 열이 있습니다.

내가 그때는 오류 것 고정 장치 관련되지 않는 FixtureId를 사용하여 이닝 테이블에 삽입 할 수 있지만, 그렇지 않은 경우 ...

사람이 이유를 설명 할 수 있다는 기대

이것은?

+0

MyISAM 또는 Innodb 테이블 유형은 무엇입니까? 내 생각 엔 외래 키를 시행하지 않는 MyISAM이 될 것입니다. Innodb이라면 외래 키 제약 조건이 있습니까? CREATE TABLE 문을 게시하면 둘 다 응답됩니다. –

답변

6

테이블을 만들 때 InnoDB 스토리지 엔진을 사용하고 있는지 확인하십시오. 다른 스토리지 엔진은 단순히 외래 키 제약 조건을 무시합니다. (Source)

예 :

ERROR 1452 (23000) :

CREATE TABLE a (
    id INT AUTO_INCREMENT PRIMARY KEY 
) ENGINE=INNODB; 

CREATE TABLE b (
    id INT AUTO_INCREMENT PRIMARY KEY, 
    a_id INT, 
    FOREIGN KEY (a_id) REFERENCES a(id) 
) ENGINE=INNODB; 

INSERT INTO b (id, a_id) VALUES(NULL, 1); 

위의 삽입에 실패 추가 또는 자식 행을 업데이트 할 수 없습니다 : 외래 키 제약 조건이 실패 ...

+0

그 외에도 인라인'REFERENCES' 키워드는 InnoDB에 의해 무시됩니다. ** 대신 ** FOREIGN KEY 구문을 사용해야합니다 : http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html – Powerlord

+0

brillient thanks – Steve

+0

와우, 고마워. . PostgreSQL에서 나왔습니다. MyISAM은 * default * 엔진이므로 외래 키가 예상대로 작동하지 않습니다. (당신은 그것이 경고 또는 뭔가를 던질 수 있다고 생각할 것입니다. "여기에 외래 키가 있다는 것을 알았습니다. 행운을 빈다, 친구.") – Thanatos

0

메신저 잘 모르겠다면 정교하게 SQL 문을 표시 할 수 있습니까? 그 필드에 대한 가치가 없다면 외래 키를 그냥 비워두면 올바르게 이해할 수 있습니다.

관련 문제