`

【转】MySQL Error Number 1005 Can’t create table'...'(errno: 150)

阅读更多

MySQL Error Number 1005 Can’t create table' (...)(errno: 150)

This is a very common error when create a mysql table , even some people has take it as a mysql bug and commit it to the official , I came up with this bothered problem these days also, after a crazy Google work, the source of the problem became clear , the following lines is a very good article that give that "bug" a conclusion , and I'd like to translate it into simple Chinese in case you'll hit that problem again ,

Concerning the personal talent, some mistakes can not be avoid , if you found any, please feel free to contact me , or leave a message below, thanks in advance.
source url :

http://www.verysimple.com/blog/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/

Translation text :

当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的 bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。

在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序,已知的原因:

1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配,更多关于signed 和 unsigned 的信息,请参阅:http://www.verysimple.com/blog/?p=57

2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。

3, 外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

4, 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型

5, 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug.

6, 请确定你的Charset 和 Collate 选项在表级和字段级上的一致

7, 你可能设置为外键设置了一个默认值,如 default=0

8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。

9, ALTER 声明中有语法错误

分享到:
评论

相关推荐

    Can't create TCP/IP socket(24).原因及解决办法

    3. "ERROR - Unable to connect to foreign data source- Can't create TCP-IP socket (24)_冰刀(skate)-CSDN博客.url":这可能是一个具体的案例,描述了在尝试连接外部数据源时遇到的TCP/IP套接字创建问题。...

    MySQL Error Code文档手册

    * Error 1005:SQLSTATE: HY000 (ER_CANT_CREATE_TABLE) Message: Can't create table '%s' (errno: %d) * Error 1006:SQLSTATE: HY000 (ER_CANT_CREATE_DB) Message: Can't create database '%s' (errno: %d) * ...

    解决mysql ERROR 1017:Can't find file: '/xxx.frm' 错误

    在MySQL数据库系统中,`ERROR 1017: Can't find file: '/xxx.frm'` 是一个常见的错误提示,通常与数据文件的丢失或权限问题有关。当遇到这样的错误时,数据库无法正常访问存储表结构的`.frm`文件,从而导致服务中断...

    MySQL中报错:Can’t find file: ‘./mysql/plugin.frm’的解决方法

    在MySQL数据库操作中,有时会遇到“Can't find file: './mysql/plugin.frm'”这样的错误,这通常意味着系统无法找到或访问特定的数据库表文件。这个错误可能由多种原因引起,包括但不限于文件权限问题、数据目录迁移...

    解决MYSQL出现Can”t create/write to file ”#sql_5c0_0.MYD”的问题

    MySQL error:Can’t create/write to file ‘#sql_5c0_0.MYD’ MySQL server error: Can’t create/write to file ‘C:/WINDOWS/TEMP/#sql_a80_0.MYD’ (Errcode: 17) ( 1 ) 根据从网上搜索问题提示和自己遇到的情况...

    mysql错误can't open file

    MySQL 错误:Can’t open file 的解决方案 MySQL 错误:Can’t open file 是一种典型的 MySQL 表受损错误,解决的办法就是修复表。出现这个错误的原因可能是你把数据库文件挪来挪去的结果,当然不排除其他原因。...

    MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)修复方法

    MySQL错误“Can’t open file: ‘×××.MYI’ (errno: 145)”通常是由于数据库表损坏导致的,这种情况在MySQL中并不罕见。MYI文件是MyISAM存储引擎的索引文件,当它出现问题时,意味着表的结构可能已损坏,无法正常...

    MYSQL权限不够解决办法

    ### MySQL权限不够解决办法 在使用MySQL数据库的过程中,可能会遇到“权限不足”的错误提示,这通常是因为当前用户没有足够的权限来执行某些操作(如创建表、删除数据等)。本文将详细介绍如何解决MySQL权限不足的...

    MySQL复制出错 Last_SQL_Errno:1146的解决方法

    Last_SQL_Error: Error ‘Table ‘spider.tb_city_population_rank’ doesn’t exist’ on query. Default database: ‘spider’. Query: ‘alter table tb_city_population_rank discard tablespace’ Last_SQL_...

    安装mysql-8.0.19-winx64遇到的问题:Can’t create directory ‘xxxx\Database\’

    如图,用管理员运行,在命令行窗口输入mysqld --initialize --console,执行初始化命令,出现了mysqld: Can’t create directory ‘D: ystem tool\mysql-8.0.19-winx64\Database’ (OS errno 2 – No such

    MYSQL错误:Can’t open file: ‘.MYI’ (errno: 145)修复方法

    下面看看这个问题: Can’t open file: ‘×××.MYI’ (errno: 145),这个错误一般就是你的数据库表文件损坏造成的,造成的原因大概是你把数据库文件挪来挪去的结果,当然不排除其他原因啊。 具体数据库出现错误的...

    解析mysql数据库还原错误:(mysql Error Code: 1005 errno 121)

    错误代码121进一步说明了具体问题,即"Can't create table",通常是因为试图创建的表与已经存在的表有冲突,或者表的外键约束定义不正确。具体到errno 121,它提示的是"Duplicate key on write or update",即在写入...

    解决mysql ERROR 1017:Can’t find file: ‘/xxx.frm’ 错误

    在使用MySQL数据库的过程中,有时会遇到“ERROR 1017: Can’t find file: ‘/xxx.frm’”这样的错误。这个问题并不意味着文件`/xxx.frm`实际丢失,而是由于文件的权限设置不正确导致的。在描述中提到,文件的所有者...

    Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法

    针对标题和描述中所提及的“Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法”,该问题主要发生在尝试在Windows操作系统的TEMP文件夹中创建或写入文件时失败,通常会导致MySQL数据库软件报错。...

    如何解决mysqlimport: Error: 13, Can't get stat of 的问题

    在使用`mysqlimport`时,有时可能会遇到错误提示“Error: 13, Can't get stat of”,这通常与文件访问权限或路径相关。本文将深入探讨这个问题及其解决方案。 错误13在操作系统中表示“Permission denied”,意味着...

    Errno 14 curl#37 - "Couldn't open file /mnt/repodata/repomd.xml

    当遇到"Errno 14 curl#37 - "Couldn't open file /mnt/repodata/repomd.xml""这样的错误时,意味着在尝试使用`yum`执行操作时,系统无法找到必要的元数据文件——`repomd.xml`。这个文件包含了软件仓库的详细信息,...

    解决启动MongoDB错误:error while loading shared libraries: libstdc++.so.6:cannot open shared object file:

    - 如果MongoDB在Ubuntu下启动失败并提示“couldn't remove fs lock errno:9 Bad file descriptor”,可能是文件锁问题,需要清理遗留的锁文件或检查文件权限。 - 当MongoDB报告“tcmalloc: large alloc out of ...

    Linux下errno.h文件错误号说明.docx

    Linux errno.h 文件错误号说明 errno.h 文件是 Linux 系统中一个非常重要的头文件,它定义了一系列的错误号,每个错误号对应着一个特定的错误信息。了解这些错误号对于 Linux 系统的开发和调试至关重要。 在 Linux...

Global site tag (gtag.js) - Google Analytics