2011-10-06 2 views
0

이 내가 facerecord라는 이름의 테이블두 테이블에서 참조를 만드는 방법은 무엇입니까? MySQL의

CREATE TABLE IF NOT EXISTS `facerecord` (
    `carslibrary_ID` int(10) NOT NULL, 
    `colorslibrary_ID` int(11) NOT NULL, 
    KEY `carslibrary_ID` (`carslibrary_ID`), 
    KEY `colorslibrary_ID` (`colorslibrary_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

난이 오류

무엇입니까했다 CarID 및

ColorID

을 참조하여 다른 테이블을 만들려면 내 테이블
CREATE TABLE IF NOT EXISTS `carslibrary` (
    `CarID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `CarName` varchar(255) NOT NULL, 
    PRIMARY KEY (`CarID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; 

CREATE TABLE IF NOT EXISTS `colorslibrary` (
    `ColorID` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `ColorName` varchar(255) NOT NULL, 
    PRIMARY KEY (`ColorID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; 

입니다
Error creating foreign key on carslibrary_ID (check data types) 

Error creating foreign key on colorslibrary_ID (check data types) 

Error 
ALTER TABLE `facerecord` ADD FOREIGN KEY ( `carslibrary_ID`) REFERENCES `cars2`.`carslibrary` (
`CarID` 
) ON DELETE SET NULL ON UPDATE SET NULL ; 

ALTER TABLE `facerecord` ADD FOREIGN KEY ( `colorslibrary_ID`) REFERENCES `cars2`.`colorslibrary` (
`ColorID` 
) ON DELETE SET NULL ON UPDATE SET NULL ; 

답변

2

요일에 일치하지 않는 데이터 유형이 있습니다. UR 메인 테이블은 unsigned 정수형을 사용하지만, facerecord 테이블은 데이터 형식으로 일반 서명 INT(10), INT(11)을 사용합니다.

변경 facerecord에 :

CREATE TABLE IF NOT EXISTS `facerecord` (
    `carslibrary_ID` int(10) unsigned NOT NULL, 
    `colorslibrary_ID` int(11) unsigned NOT NULL, 
    KEY `carslibrary_ID` (`carslibrary_ID`), 
    KEY `colorslibrary_ID` (`colorslibrary_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
1

CarIdColorId부호 정수, 그래서 당신은 사용해야합니다

CREATE TABLE IF NOT EXISTS `facerecord` (
    `carslibrary_ID` int(10) unsigned NOT NULL, 
    `colorslibrary_ID` int(11) unsigned NOT NULL, 
    KEY `carslibrary_ID` (`carslibrary_ID`), 
    KEY `colorslibrary_ID` (`colorslibrary_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
관련 문제