当你试图在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. 要连接的两个表的编码格式不同
我这边遇到的问题主要是定义的类型不匹配的问题
相关推荐
3. **错误处理**:MySQL API 提供了错误码和错误信息,如 `mysql_errno()` 和 `mysql_error()`,用于诊断和调试连接或查询问题。 4. **安全性**:确保敏感信息如数据库密码的安全,避免硬编码在代码中,可以使用...
在MySQL中,创建外键关联时遇到"errno:150"错误,通常是由于数据类型不匹配、缺少索引或不正确的约束设置等原因导致的。以下是对这些常见问题的详细解释: 1. **数据类型不匹配**:外键字段与主键字段的数据类型...
通过`mysql_errno()`和`mysql_error()`函数,可以获取错误码和错误信息。 7. **安全性和性能优化**:在实际应用中,应注意SQL注入和性能优化。使用参数化查询(预编译语句)可以防止SQL注入,而通过批量处理、连接...
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件...
MySQL Connector/C 提供了错误处理函数,例如 `mysql_errno()` 和 `mysql_error()`,它们可以帮助开发者识别并解决连接或查询过程中的问题。同时,为确保应用程序的安全性,应遵循最佳实践,如避免 SQL 注入攻击,...
### MySQL权限不够解决办法 在使用MySQL数据库的过程中,可能会遇到“权限不足”的错误提示,这通常是因为当前用户没有足够的权限来执行某些操作(如创建表、删除数据等)。本文将详细介绍如何解决MySQL权限不足的...
在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以...
MySQL数据库在启动时可能会遇到各种错误,其中一种常见的报错是"File ./mysql-bin.index not found (Errcode: 13)"。这个错误通常表明MySQL无法找到它的二进制日志索引文件(mysql-bin.index),并且错误代码13通常...
4. **错误处理**:MySQL Connector/C提供了`mysql_error()`和`mysql_errno()`函数,用于获取上一次操作的错误信息和错误代码,帮助开发者调试程序。 5. **事务支持**:通过`mysql_autocommit()`可以控制自动提交...
如图,用管理员运行,在命令行窗口输入mysqld --initialize --console,执行初始化命令,出现了mysqld: Can’t create directory ‘D: ystem tool\mysql-8.0.19-winx64\Database’ (OS errno 2 – No such
- 错误处理:提供`mysql_error()`和`mysql_errno()`函数获取错误信息和错误代码。 - 游标支持:允许通过游标进行数据检索,方便进行分批处理或多次迭代。 2. **MySQL Connector/C 6.1.5的安装** 安装MySQL ...
离线安装包,亲测可用
errno: 2` - `0904179:02:55 [ERROR] Plugin 'InnoDB' init function returned error.` - `0904179:02:55 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.` - `0904179:02:55 [ERROR] Unknown/...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
2. 错误处理:使用`mysql_error()`或`mysql_errno()`检查并处理可能出现的错误。 3. 安全性:尽量使用预处理语句和参数绑定,以防止SQL注入攻击。 4. 连接池:对于频繁的数据库交互,考虑使用连接池以提高效率和资源...
使用PHP访问MySQL数据库 -----连接数据库 连接数据库 ...课程内容 一、连接数据库 ...if(MySQLi_connect_errno()) { echo'Error:could not connect to DB.Please try again later.' exit; } MySQL的max_connection
减少此类问题发生的办法就是尽量减少服务器无故断电,关闭服务器时,最后先手动关闭mysql数据库。 下面看看这个问题: Can’t open file: ‘×××.MYI’ (errno: 145),这个错误一般就是你的数据库表文件损坏造成的...
MySQL错误解析器这个库为5.5版至8.0版中的所有mysql服务器错误提供了正则表达式模式。 它可用于从mysql错误和将来的... $ structuredError = $ parser -> matchError ( $ connect -> errno , $ connect -> error ); var
- 错误信息:`Slave_SQL_Running: No, Last_Errno: 1062` - 原因:可能是两边数据不一致,在复制过程中检测到主键冲突。 - **解决方案**: - 修改MySQL配置文件,添加如下行: ```ini slave_skip_errors = ...
在Linux系统中,尤其是阿里云(ECS)服务器上安装MySQL时,可能会遇到“Invalid GPG Key”的错误,提示如“Invalid GPG Key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql”。这个问题通常是由于之前不正确的卸载操作...