首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL错误的更多细节:150

问MySQL错误的更多细节:150
EN

Database Administration用户
提问于 2014-06-17 18:56:07
回答 1查看 192关注 0票数 1

当MySQL由于外键约束问题而无法创建表时,它将返回以下错误

无法创建表“dbname.table_name”(errno: 150)

是否有MySQL告诉您为什么不能创建表(或者自动查找/分析)。例如,如果您试图创建一个包含10个外键的表,而其中一个键无效,那么是否有一种方法可以让MySQL告诉您哪个是有问题的键?或者你需要依靠人类的智慧和调试来自己解决这个问题?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-06-17 21:42:25

不幸的是,我不得不

依靠人类的智慧和调试来自己解决这个问题。

原因如下:

假设您有下表

代码语言:javascript
复制
CREATE TABLE projects (
    StaffID INT NOT NULL,
    ProjectName VARCHAR(20) NOT NULL,
    Allocation INT NOT NULL,
    PRIMARY KEY (StaffID, ProjectName) ,
    FOREIGN KEY (StaffID) REFERENCES Staff(StaffID) ON DELETE CASCADE
);

MySQL必须查找一个名为Staff的表。如果它找到表Staff,则MySQL必须在该表中找到一个名为StaffID的列。

对于具有10个外键的表,该算法将被执行10次。遗憾的是,MySQL不会生成错误,说明哪个表或列名导致创建表失败。您只需移除其中一个外键,然后使用9、8等进行尝试。

这是一个需要情报的奇怪案例:

  • 如果您从运行在InnoDB中的MySQL数据库中对MySQL数据进行mysqldump并试图将其导入Linux,该怎么办?
  • 如果您从运行在Linux中的InnoDB数据库中的MySQL数据进行mysqldump并尝试将其导入到MySQL中,该怎么办?

存在一个区分大小写的问题。因此,外键引用可能会失败。

我早在2014年3月就讨论过这个问题:创建表将导致errno 150

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/68433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档