2011-10-06 32 views
0

這是我的表我們如何從兩張表中找出參考? MySQL的

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 ; 

我想創建另一個表參照CarID和ColorID

我做facerecord命名

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; 

我收到此錯誤

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

您在該喲中有不匹配的數據類型你的主表使用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;