2016-11-22 47 views
1

我想作一个数据库,如下准确:MySQL的:错误号:105无法创建表

enter image description here

,所以我想定义每个表的主键和外键。 基于this答案,我看到:

  • “城市” 表有1个PK(ID)和1 FK(COUNTRYCODE)

  • “countrylanguage” 表中有2 PK(语言和COUNTRYCODE) 1 FK (COUNTRYCODE)

  • “国” 表已经1个PK(代码)

所以我竭力试图Ø做出一些神奇的一个“预热”代码:

CREATE TABLE `City` (
    `ID` int(11) NOT NULL, 
    `Name` varchar(35) NOT NULL , 
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `District` varchar(20) NOT NULL , 
    `Population` int(11) NOT NULL , 
    PRIMARY KEY(`ID`) , 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `CountryLanguage` (
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `Language` varchar(30) NOT NULL , 
    `IsOfficial` varchar(30) NOT NULL , 
    `Percentage` float(4,1) NOT NULL , 
    PRIMARY KEY(`Language`), 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `Country` (
    `Code` varchar(3) NOT NULL DEFAULT '', 
    `Name` varchar(52) NOT NULL DEFAULT '', 
    `Continent` varchar(63), 
    `Region` varchar(26) 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` varchar(45) NOT NULL DEFAULT '', 
    `GovernmentForm` varchar(45) NOT NULL DEFAULT '', 
    `HeadOfState` varchar(60) DEFAULT NULL, 
    `Capital` int(11) DEFAULT NULL, 
    `Code2` varchar(2) NOT NULL DEFAULT '', 
    PRIMARY KEY(`Code`) 
) ; 

但我的好醇“mysql命令行客户端具有相同的错误1005两次的事情,并说,它不能创建表” test.city '和'test.countrylanguage' 以errno:150作为解释。

所以我在这里搜索了一下,发现了一些关于不具有相同类型/参数(f.e.INT(2)到INT(2)NOT NULL)的表元素的答案。就像我所看到的那样,这里没有发生这种情况。

我在这里失去了咖啡的大脑是什么?

非常感谢您提前预约。

+0

这不能被标记为mysql和sql-server。选一个 – WillardSolutions

+0

我正要编辑删除它。对不起。 – Coursal

回答

2

错误创建sequnce你应该创建firts的国家,因为城市和CountryLanguage指国表

CREATE TABLE `Country` (
    `Code` varchar(3) NOT NULL DEFAULT '', 
    `Name` varchar(52) NOT NULL DEFAULT '', 
    `Continent` varchar(63), 
    `Region` varchar(26) 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` varchar(45) NOT NULL DEFAULT '', 
    `GovernmentForm` varchar(45) NOT NULL DEFAULT '', 
    `HeadOfState` varchar(60) DEFAULT NULL, 
    `Capital` int(11) DEFAULT NULL, 
    `Code2` varchar(2) NOT NULL DEFAULT '', 
    PRIMARY KEY(`Code`) 
) ; 

    CREATE TABLE `City` (
    `ID` int(11) NOT NULL, 
    `Name` varchar(35) NOT NULL , 
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `District` varchar(20) NOT NULL , 
    `Population` int(11) NOT NULL , 
    PRIMARY KEY(`ID`) , 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 

CREATE TABLE `CountryLanguage` (
    `CountryCode` varchar(3) NOT NULL DEFAULT '', 
    `Language` varchar(30) NOT NULL , 
    `IsOfficial` varchar(30) NOT NULL , 
    `Percentage` float(4,1) NOT NULL , 
    PRIMARY KEY(`Language`), 
    FOREIGN KEY(`CountryCode`) REFERENCES `Country`(`Code`) 
) ; 
+0

听起来是对的,因为外键还不存在于原来的 – DontKnow

+0

我正要将其更新为此。该死的,你们很快!它像创建表的魅力一样工作,但当我尝试向它插入元素时,会出现另一个错误(错误1452(23000):无法添加或更新子行:外键约束失败)。 – Coursal

+0

可能是你正在插入worng实例序列中的值..检查你的代码中的逻辑..或发布一个新的问题与相关的代码..适当的数据示例和预期的结果 – scaisEdge

3

CREATE TABLE Country,然后再CREATE TABLE City和CREATE TABLE CountryLanguage,因为表Country由其他参考两张桌子。