在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. 两个表已经有数据了。这种情况下,需要在修改关联字段的值。

最新文章

  1. Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
  2. dll return a string
  3. ZooKeeper一二事 - 搭建ZooKeeper伪分布式及正式集群 提供集群服务
  4. 二、XML约束
  5. Ubuntu12.04 使用中遇到的问题
  6. php信用卡卡号验证函数
  7. HDU 2602 Bone Collector - from lanshui_Yang
  8. Cortex-M3动态加载三(模块调用系统函数)
  9. 【原创】源码角度分析Android的消息机制系列(三)——ThreadLocal的工作原理
  10. vim/network/ssh
  11. invalid types 'int[int]' for array subscript// EOF 输入多组数据//如何键盘输入EOF
  12. Django初印象之视图(view)
  13. ASP.NET Core API 接收参数去掉烦人的 [FromBody]
  14. red hat下Oracle服务自启动的方法
  15. QRCode.js生成二维码
  16. 最适合入门的Laravel中级教程(三)表单验证
  17. ping主机不通邮件报警
  18. Linux文件系统操作
  19. Reference Type Casting
  20. hashMap原理剖析

热门文章

  1. 浅析MySQL中change与modify的区别
  2. 4. JSON字符串是如何被解析的?JsonParser了解一下
  3. Fortify Audit Workbench 笔记索引
  4. SAP四代增强实现:销售订单复制项目文本时不需要显示文本框和回车
  5. three.js之初探骨骼动画
  6. Python语言及其应用 中文pdf完整版|网盘下载内附提取码
  7. windows:shellcode 远程线程hook/注入(二)
  8. 00-基础SQL-SELECT语句
  9. CI4框架应用五 - 加载视图
  10. GitLab 配置模板