mysql 1215错误 外键建立失败
2024-10-09 13:08:59
在Mysql中创建数据表时,经常会遇到问题而失败,其中建立外键有很多细节需要我们去留意,主要有以下几种常见原因。
1. 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否都为signed或者unsigned,这两字段必须严格地一致匹配。
2. 设置外键的字段没有建立起索引,或者不是一个primary key(主键)。一般,需要建立外键的数据表称为子表,而相关联的数据表称为父表。建立外键时所对应的父表的字段必须要创建索引primary key。
3. 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。
4. 外键的名字不能重复。检查该数据库确保外健名字是唯一的,或者你可以在键名后面加上几个随机的字符以测试是否为此原因。
5. 设置了ON DELETE SET NULL,但是相关的键的字段设置成了NOT NULL值。通过修改外键的属性值或者把字段属性设置成allow null来解决。
6. 确保你的Charset和Collate选项在表级和字段级上的一致。
7. 两字段设置的默认值不一致。一个字段设置default为0,一个设置default为null,也是不可行的。
8. ALTER声明中有语法错误
9. 两个表已经有数据了。这种情况下,需要在修改关联字段的值。
最新文章
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
- dll return a string
- ZooKeeper一二事 - 搭建ZooKeeper伪分布式及正式集群 提供集群服务
- 二、XML约束
- Ubuntu12.04 使用中遇到的问题
- php信用卡卡号验证函数
- HDU 2602 Bone Collector - from lanshui_Yang
- Cortex-M3动态加载三(模块调用系统函数)
- 【原创】源码角度分析Android的消息机制系列(三)——ThreadLocal的工作原理
- vim/network/ssh
- invalid types 'int[int]' for array subscript// EOF 输入多组数据//如何键盘输入EOF
- Django初印象之视图(view)
- ASP.NET Core API 接收参数去掉烦人的 [FromBody]
- red hat下Oracle服务自启动的方法
- QRCode.js生成二维码
- 最适合入门的Laravel中级教程(三)表单验证
- ping主机不通邮件报警
- Linux文件系统操作
- Reference Type Casting
- hashMap原理剖析