2013-05-26 2 views
0

여기 내 테이블 세 테이블을 만드는 것입니다. 세 번째 키에는 다음 두 키의 외래 키가 있습니다. 나는 왜 MySQL이 세번째를 만들 수 없는지 모르겠다. 열의 유형이 일치합니다. 당신이 외래 키 관계를 만들 때MySQL 반환합니다 : errno : 150 - 외래 키 오류

DROP TABLE IF EXISTS `SET`; 
CREATE TABLE IF NOT EXISTS `SET` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `SET_ID` int(11) DEFAULT 0, 
    `SET_NAME` varchar(32) NOT NULL, 
    `SET_RELEASE_DATE` date NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

DROP TABLE IF EXISTS `TYPE`; 
CREATE TABLE IF NOT EXISTS `TYPE` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `TYPE_ID` int(11) DEFAULT 0, 
    `TYPE_NAME` varchar(32) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

DROP TABLE IF EXISTS `CARD`; 
CREATE TABLE IF NOT EXISTS `CARD` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `CARD_ID` int(11) NOT NULL DEFAULT 0, 
    `CARD_NAME` varchar(64) DEFAULT NULL, 
    `SET_ID` int(11) DEFAULT 0, 
    `TYPE_1` int(11) DEFAULT 0, 
    `TYPE_2` int(11) DEFAULT 0, 
    `TYPE_3` int(11) DEFAULT 0, 
    `TYPE_4` int(11) DEFAULT 0, 
    PRIMARY KEY (`ID`), 
    CONSTRAINT `card_idfk_1` FOREIGN KEY (`SET_ID`) 
    REFERENCES `SET`(`SET_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `card_t1fk_1` FOREIGN KEY (`TYPE_1`) 
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `card_t2fk_1` FOREIGN KEY (`TYPE_2`) 
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `card_t3fk_1` FOREIGN KEY (`TYPE_3`) 
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `card_t4fk_1` FOREIGN KEY (`TYPE_4`) 
    REFERENCES `TYPE`(`TYPE_ID`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

답변

1

는, 문제의 키 (here 참조) 참조 된 테이블에 인덱스를 가지고 있습니다. 예를 들어

,이 코드 : card_idfk_1 제약에

DROP TABLE IF EXISTS `SET`; 
CREATE TABLE IF NOT EXISTS `SET` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `SET_ID` int(11) NOT NULL DEFAULT 0, 
    `SET_NAME` varchar(32) NOT NULL, 
    `SET_RELEASE_DATE` date NOT NULL, 
    PRIMARY KEY (`ID`), 
    index(set_id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

수정 문제. 참고 : key 또는 index을 키워드로 사용할 수 있습니다.

+0

고마워, 나는 내 수업에서 이것을 기억하지 못한다. 유형이 일치해야한다고 생각했습니다. –

관련 문제