2017-02-25 131 views
0

我真的尝试创建一个数据库,但我与外键错误。你可以帮我吗?1215 - 不能添加外键约束

DROP TABLE IF EXISTS `City`; 
CREATE TABLE `City` (`id` int(11) NOT NULL AUTO_INCREMENT, 
`idCountry` int(11) DEFAULT NULL, 
`Name` char(35) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`CountryCode` char(3) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`District` char(20) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`Population` int(11) NOT NULL DEFAULT '0', 
PRIMARY KEY (`id`) USING BTREE, 
KEY `fk_constraint_city_country` (`idCountry`), 
CONSTRAINT `fk_constraint_city_country` FOREIGN KEY (`idCountry`) 
REFERENCES `Country` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=utf8; 

我有这样的错误:MySQL表示:文档 1215 - 不能添加外键约束

+0

您可以发布该国表架构?来自“国家”表的Maby ID与“city”表中的idCountry不是同一类型 –

+1

外键需要引用来自**表**的列,您尚未在“FOREIGN KEY(idCountry)” – GurV

+0

中提供列国表shema: – rowe

回答

0
DROP TABLE IF EXISTS `Country`; 
CREATE TABLE `Country` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`Code` char(3) CHARACTER SET latin1 DEFAULT NULL, 
`Name` char(52) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`Continent` enum('Asia','Europe','North 
America','Africa','Oceania','Antarctica','South America') CHARACTER SET  
latin1 NOT NULL DEFAULT 'Asia', 
`Region` char(26) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00', 
`IndepYear` smallint(6) DEFAULT NULL, 
`Population` int(11) NOT NULL DEFAULT '0', 
`LifeExpectancy` float(3,1) DEFAULT NULL, 
`GNP` float(10,2) DEFAULT NULL, 
`GNPOld` float(10,2) DEFAULT NULL, 
`LocalName` char(45) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`GovernmentForm` char(45) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`HeadOfState` char(60) CHARACTER SET latin1 DEFAULT NULL, 
`Capital` int(11) DEFAULT NULL, 
`Code2` char(2) CHARACTER SET latin1 NOT NULL DEFAULT '', 
PRIMARY KEY (`id`) USING BTREE 
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8; 

,并有全国langage:

DROP TABLE IF EXISTS `CountryLanguage`; 
CREATE TABLE `CountryLanguage` (
`idCountry` int(11) NOT NULL DEFAULT '0', 
`idLanguage` int(11) NOT NULL DEFAULT '0', 
`IsOfficial` enum('T','F') CHARACTER SET latin1 NOT NULL DEFAULT 'F', 
`Percentage` float(4,1) NOT NULL DEFAULT '0.0', 
PRIMARY KEY (`idCountry`,`idLanguage`) USING BTREE, 
KEY `fk_constraint_Language` (`idLanguage`), 
CONSTRAINT `fk_constraint_Country` FOREIGN KEY (`idCountry`) REFERENCES  
`Country` (`id`), 
CONSTRAINT `fk_constraint_Language` FOREIGN KEY (`idLanguage`)  
REFERENCES `Language` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf