【问题标题】:MySQL: errno: 105 can't create tableMySQL: errno: 105 无法创建表
【发布时间】:2016-11-22 21:13:27
【问题描述】:

我想创建一个完全如下的数据库:

所以我想为每个表定义主键和外键。 根据this 的回答,我看到了:

  • “city”表有 1 个 PK(ID)和 1 个 FK(国家代码)

  • “countrylanguage”表有 2 个 PK(语言和国家代码)和 1 个 FK (国家代码)

  • “国家”表有 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 命令行客户端两次出现相同的 ERROR 1005,并说它无法创建表 'test.city' 和 'test.countrylanguage' 以 errno:150 作为解释。

所以我在这里搜索了一下,发现了一些关于不具有相同类型/参数的表元素的答案(例如 INT(2) 到 INT(2) NOT NULL)。据我所知,这里没有发生过这样的事情。

我喝咖啡的大脑在这里缺少什么?

提前感谢您的宝贵时间。

【问题讨论】:

  • 这个不能标记为mysql和sql-server。选择一个
  • 我正要进行编辑删除它。对不起。

标签: mysql mysql-workbench


【解决方案1】:

首先创建 TABLE Country,然后创建 TABLE City,然后创建 TABLE CountryLanguage,因为其他两个表都引用了 TABLE Country

【讨论】:

    【解决方案2】:

    创建顺序错误,您应该创建第一个 Country,因为 City 和 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`)
      ) ;
    

    【讨论】:

    • 听起来不错,因为外键在原始文件中尚不存在
    • 我也正要更新它。妈的,你们真快!它的工作原理就像创建表的魅力,但是当我尝试向其中插入元素时,出现另一个错误(错误 1452 (23000):无法添加或更新子行:外键约束失败)。
    • 可能是您在磨损的实例序列中插入值..检查代码中的逻辑..或使用相关代码发布新问题..正确的数据样本和预期结果
    猜你喜欢
    • 2016-02-11
    • 2014-04-05
    • 2010-12-17
    • 2016-06-08
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多