当前位置:  数据库>mysql

MYSQL建立外键失败几种情况记录Can't create table不能创建表

    来源: 互联网  发布时间:2014-09-06

    本文导语:  像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在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 声明中有语法错误

最后:建立外键有点麻烦,可以直接用Myeclipse生成ddl。。。

    
 
 

您可能感兴趣的文章:

  • mysql主从连接失败,怎样通过binlog日志恢复呢?
  • mysql 安装完之后服务启动失败
  • MySQL外键创建失败1005原因汇总
  • apache模块 mysql数据库 update失败
  • 如何解决mysql重装失败方法介绍
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock iis7站长之家
  • linux mysql安装失败
  • Ubuntu11.04下安装Mysql5.5失败,求大神指教
  • 重装MySQL最后一步失败的完美解决方案(经验总结)
  • Mysql修改默认编码linux 失败
  • 磁盘已满造成的mysql启动失败问题分享
  • mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
  • suse 10 mysql 安装失败
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 ubuntu 安装mysql源码失败,好像是没有找到hostent_data的定义。急~~~~~~~~~~
  • PHP中使用sleep造成mysql读取失败的案例和解决方法
  • mysql启动提示mysql.host 不存在,启动失败的解决方法
  • 急!linux下mysql的创建用户组和创建用户命令不能生效啊????
  • mysql 添加索引 mysql 如何创建索引
  • MySQL里Create Index 能否创建主键 Primary Key
  • 请问MYSQL 创建的数据库在什么地方(路径)我用的是REDHAT7。3并用RPM安装
  • MySQL5创建存储过程的示例
  • Mysql启动与数据库的创建方法[图文]
  • 在Mysql上创建数据表实例代码
  • MySQL 创建主键,外键和复合主键的语句
  • MySQL 创建索引(Create Index)的方法和语法结构及例子
  • mysql创建函数出现1418错误的解决办法
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • php mysql创建临时表的例子
  • MySQL学习笔记2:数据库的基本操作(创建删除查看)
  • mysql外键(Foreign Key)介绍和创建外键的方法
  • 如何使用JSP+MySQL创建留言本(一)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql建立自定义函数的问题
  • 请问如何建立mysql表啊
  • MYSQL索引建立需要注意以下几点细节
  • 怎么样在Jbuilder中配置Jboss和Mysql(建立Jbuilder中EJB调试环境)?
  • 在win 2000企业版上怎样建立jsp的环境?(使用oracle9数据库或mysql)
  • Mysql存储过程学习笔记--建立简单的存储过程
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程
  • 在Linux内安装了Mysql,无法进入Mysql.
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 怎样在linux终端输入mysql直接进入mysql?
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • c++中关于#include <mysql/mysql.h>的问题?
  • MySQL索引基本知识
  • mysql -u root mysql 怎么解释
  • Mysql设置查询条件(where)查询字段为NULL
  • mm.mysql那里可以下载?www.mysql.com根本下载不了。谢谢了
  • mysql中字符串和时间互相转换的方法(自动转换及DATE_FORMAT函数)
  • MySQL集群 MySQL Cluster


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3