mysql处理添加外键时提示error 150 问题的解决方法_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 声明中有语法错误

1、外键的引用类型不一样,主键是int外键是char

2、找不到主表中 引用的列

3、主键和外键的字符编码不一致

4.还有要建立外键的话,要先建立索引。没有建立索引也会出错。

我的问题解决方案是在sql后面加上了如下句话,ok!成功导入脚本
ENGINE=INNODB DEFAULT CHARSET=utf8;
charset对应的换成你的主键表的字符集!

时间: 2024-10-26 19:55:18

mysql处理添加外键时提示error 150 问题的解决方法_Mysql的相关文章

解析在MySQL里创建外键时ERROR 1005的解决办法_Mysql

在MySQL里创建外键时,提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can't create table 'db_qxztc.qx_userssssnew' (errno: 150).根本起不到解决问题的作用. 要看错误的详细提示,可以使用命令:(在MySQL Manual里搜索"errno 150"时找到) SHOW ENGINE INNODB STATUS;     //针对用INNODB存储方式的数据库 在信息中有一组[LATEST FOREIGN

win7系统电脑对U盘格式化操作时提示“windows无法完成格式化”解决方法

  win7系统电脑对U盘格式化操作时提示"windows无法完成格式化"解决方法.U盘设备大家经常使用到,可以用来储存.拷贝.转移数据.U盘设备在使用过程中也会遇到各种奇怪的问题,比如最近有位用户说在Ghost win7系统电脑对U盘格式化操作时提示"windows无法完成格式化",出现这个问题该如何解决呢?接下来小编和大家分享具体的解决方法,遇到此故障问题的用户来看看下面解决步骤吧. 方法一: 1.首次尝试利用"360U盘鉴定"工具来检测U盘

Win8.1系统安装QQ时提示“安装路径无效”的解决方法

  Win8.1系统安装QQ时提示"安装路径无效"的解决方法          解决方法一:更改安装路径 在QQ安装界面,点击"自定义"然后浏览到一个非C盘,如D盘的文件夹来安装. 解决方法二:使用管理员方式运行安装程序 针对安装QQ没有权限可以右键点击QQ安装程序,然后以管理员身份运行,然后看能不能安装.

电脑运行腾讯游戏时提示服务器连接异常的解决方法

        电脑运行腾讯游戏时提示服务器连接异常的解决方法         1.打开开始--运行,输入services.msc,点击确定; 2.在服务列表中找到"Windows FireWall"服务项,双击打开; 3.直接禁用该服务,或者将启动类型设为手动,并停止服务状态,点击确定. 以上便是在电脑中运行腾讯游戏时提示服务器连接异常的解决方法.

Navicatfor Mysql中添加外键方法

环境:NavicatforMysql 8.2 + MySQL Sever 5.1 问题:NavicatforMysql中添加外键 解 决: 方法一: 使用SQL语句创建外键: alter table 外键表 add constraint 约束 名 foreign key(栏位名) references 参照表(外键栏位名) on delete restrict/set null/cascade on update restrict/set null/ cascade; 不指定外键的名称,mysq

mysql登录报错提示:ERROR 1045 (28000)的解决方法_Mysql

本文分析了mysql登录报错提示:ERROR 1045 (28000)的解决方法.分享给大家供大家参考,具体如下: 一.问题: 公司linux系统的mysql数据库root用户设置过密码,但常常用命令'mysql -u root -p'登录报错,有时又能登录.登录报错信息为: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localho

mysql主从同步失败Last_IO_Error: Got fatal error 1236 from master解决方法

mysql教程主从同步失败Last_IO_Error: Got fatal error 1236 from master解决方法 遇到这样的错误如:"Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'"等或由于清数据导致主从库不同步了,解决办法如下:

MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法_Mysql

安装过程参考自:MySQL 5.6 for Windows 解压缩版配置安装 成功安装以后,启动MySQL,输入: net start mysql 提示: "MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助."  查了下,在当前目录下输入: mysqld --initialize 还是出错,又查了下,原因是: mysqld --initialize-insecure自动生成无密码的root用户,mysqld --initiali

MySQL MyISAM 添加外键失败

MySQL 在做某个表的外键关联时,提示如下错误 1215 - Cannot add foreign key constraint 后查,该表的存储引擎为 MyISAM 在 MySQL 的官方文档中提到,MyISAM 是 不支持外键的,"Foreign key support No". Storage limits 256TB Transactions No Locking granularity Table MVCC No Geospatial data type support Y