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 声明中有语法错误
分享到:
相关推荐
3. "ERROR - Unable to connect to foreign data source- Can't create TCP-IP socket (24)_冰刀(skate)-CSDN博客.url":这可能是一个具体的案例,描述了在尝试连接外部数据源时遇到的TCP/IP套接字创建问题。...
如何解决python.exe: can’t open file ‘manage.py’: [Errno 2] No such file or directory这个问题 #本文章是记录我在开发一个基于python django的项目中的一些问题。本人新手小白,请多包涵。 使用pycharm新建一...
* 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'` 是一个常见的错误提示,通常与数据文件的丢失或权限问题有关。当遇到这样的错误时,数据库无法正常访问存储表结构的`.frm`文件,从而导致服务中断...
在MySQL数据库操作中,有时会遇到“Can't find file: './mysql/plugin.frm'”这样的错误,这通常意味着系统无法找到或访问特定的数据库表文件。这个错误可能由多种原因引起,包括但不限于文件权限问题、数据目录迁移...
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 表受损错误,解决的办法就是修复表。出现这个错误的原因可能是你把数据库文件挪来挪去的结果,当然不排除其他原因。...
MySQL错误“Can’t open file: ‘×××.MYI’ (errno: 145)”通常是由于数据库表损坏导致的,这种情况在MySQL中并不罕见。MYI文件是MyISAM存储引擎的索引文件,当它出现问题时,意味着表的结构可能已损坏,无法正常...
### MySQL权限不够解决办法 在使用MySQL数据库的过程中,可能会遇到“权限不足”的错误提示,这通常是因为当前用户没有足够的权限来执行某些操作(如创建表、删除数据等)。本文将详细介绍如何解决MySQL权限不足的...
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_...
如图,用管理员运行,在命令行窗口输入mysqld --initialize --console,执行初始化命令,出现了mysqld: Can’t create directory ‘D: ystem tool\mysql-8.0.19-winx64\Database’ (OS errno 2 – No such
下面看看这个问题: Can’t open file: ‘×××.MYI’ (errno: 145),这个错误一般就是你的数据库表文件损坏造成的,造成的原因大概是你把数据库文件挪来挪去的结果,当然不排除其他原因啊。 具体数据库出现错误的...
错误代码121进一步说明了具体问题,即"Can't create table",通常是因为试图创建的表与已经存在的表有冲突,或者表的外键约束定义不正确。具体到errno 121,它提示的是"Duplicate key on write or update",即在写入...
在使用MySQL数据库的过程中,有时会遇到“ERROR 1017: Can’t find file: ‘/xxx.frm’”这样的错误。这个问题并不意味着文件`/xxx.frm`实际丢失,而是由于文件的权限设置不正确导致的。在描述中提到,文件的所有者...
针对标题和描述中所提及的“Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法”,该问题主要发生在尝试在Windows操作系统的TEMP文件夹中创建或写入文件时失败,通常会导致MySQL数据库软件报错。...
当遇到"Errno 14 curl#37 - "Couldn't open file /mnt/repodata/repomd.xml""这样的错误时,意味着在尝试使用`yum`执行操作时,系统无法找到必要的元数据文件——`repomd.xml`。这个文件包含了软件仓库的详细信息,...
在使用`mysqlimport`时,有时可能会遇到错误提示“Error: 13, Can't get stat of”,这通常与文件访问权限或路径相关。本文将深入探讨这个问题及其解决方案。 错误13在操作系统中表示“Permission denied”,意味着...
- 如果MongoDB在Ubuntu下启动失败并提示“couldn't remove fs lock errno:9 Bad file descriptor”,可能是文件锁问题,需要清理遗留的锁文件或检查文件权限。 - 当MongoDB报告“tcmalloc: large alloc out of ...
Linux errno.h 文件错误号说明 errno.h 文件是 Linux 系统中一个非常重要的头文件,它定义了一系列的错误号,每个错误号对应着一个特定的错误信息。了解这些错误号对于 Linux 系统的开发和调试至关重要。 在 Linux...