解析MySQL创建外键关联错误 - errno:150

时间:2024-01-16 03:41:14 

当你试图在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 声明中有语法错误

10. 要连接的两个表的编码格式不同

标签:errno,150
0
投稿

猜你喜欢

  • python正则表达式匹配IP代码实例

    2022-01-03 00:25:52
  • 学习Python爬虫前必掌握知识点

    2022-10-09 04:32:57
  • python-pymongo常用查询方法含聚合问题

    2021-02-10 21:35:36
  • Web设计中的黄金分割[译]

    2009-02-20 13:41:00
  • python文件操作seek()偏移量,读取指正到指定位置操作

    2023-07-22 10:29:14
  • Go语言使用sort包对任意类型元素的集合进行排序的方法

    2023-09-02 03:55:18
  • 理解JavaScript中的事件 Event

    2008-03-19 11:16:00
  • Django模型验证器介绍与源码分析

    2023-10-19 13:49:53
  • Python开发桌面小程序功能

    2023-07-01 14:46:59
  • Python如何爬取b站热门视频并导入Excel

    2023-06-20 23:27:44
  • python使用suds调用webservice接口的方法

    2022-12-22 06:44:18
  • Python中的引用和拷贝实例解析

    2022-02-26 00:59:13
  • MySQL中查询字段为空或者为null的方法

    2024-01-24 01:42:21
  • 给验证码增加干扰的杂点

    2008-05-16 11:34:00
  • python OpenCV学习笔记直方图反向投影的实现

    2021-01-12 09:16:44
  • Flask 使用类组织配置详情

    2023-06-15 02:31:30
  • Python如何加载模型并查看网络

    2021-11-01 15:53:22
  • 去掉运行JavaScript时IE产生的警告栏

    2008-09-11 18:07:00
  • 实例:ASP与ACCESS链接

    2008-11-21 16:10:00
  • Firefox window.close()的使用注意事项

    2024-04-17 10:11:12
  • asp之家 网络编程 m.aspxhome.com