【问题标题】:MySQL Create Table Statement Strange ErrorsMySQL 创建表语句奇怪的错误
【发布时间】:2017-04-03 14:25:17
【问题描述】:

我正在尝试为我的数据库课程项目运行一些基本的 CREATE TABLE 语句,但遇到了一些奇怪的错误。

当我创建表 Manuf 时它运行良好,但是当我尝试使用相同的语法创建下一个表 Order 时,它不起作用。

另外,当我尝试创建这个表 Items 时,我得到一个 errno: 150。我相信这与我的外键创建有关,但我不确定。这是一个截图。

我对使用 MySQL 还很陌生,因此我们将不胜感激任何建议,谢谢。

【问题讨论】:

  • @LSerni 谢谢,解决了这个问题哈哈。但是,不确定 errno 150。
  • 请不要使用图片发布文字内容。您可以从命令窗口复制并将文本粘贴到此处。文本更容易阅读,不必要的图像使阅读者难以使用移动设备。您也无法从图像中复制文本以在尝试帮助寻找解决方案时使用。避免使用图像的原因还有很多;你可以看到他们的列表in this Meta post。仅当没有其他方法可以证明问题时才应使用图像,而这里肯定不是这种情况。谢谢。

标签: mysql create-table mysql-error-150


【解决方案1】:

Order 表上的错误是由 ORDER 是保留字引起的。您可以使用反引号将其指定为 `Order`,但最好选择完全不同的名称。

错误 150 与外键有关。密钥必须绝对相同 - 定义完全相同,否则 FK 将失败并出现错误 150。

此外,必须有一个具有该键定义的可用索引或一个兼容的索引(参见 the comment on the MySQL manual page 中的 Kai Baku 示例)。以不同顺序索引的相同字段将失败。

首先,检查这些键是如何在原始表中定义的。例如:

 test1  varchar(50) not null
 test2  varchar(50)

兼容。我认为即使是不同的排序规则也足以让 FK 失控(但我没有检查过。其余的我可以肯定,根据我个人的痛苦un经验)。

更新:我忘了提一下,如果您使用 InnoDB 表并发出 SHOW ENGINE INNODB STATUS,那么出来的简介将包含对 FK 失败原因的更好解释,大约三分之一从顶部开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多