mysql创建外键报错的原因及解决(can't not create table)
作者:GroovRain 发布时间:2024-01-15 11:57:44
最近在玩数据库的时候,偶尔会有外键创建不成功的时候,于是上网查阅资料,整合自己的理解有了以下这篇文章:
mysql创建外键不成功的原因及处理方法
第一种情况
外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配):
两个不同的表格(一个是record(借书记录表),一个是reader(读者信息表)):然后关联的两个readerid 字段要保持一致,包括长度,类型要保持一致。
然后是编码格式
两个表的引擎,字符集要保持一致,这样才能关联成功;
另外,若读者对表的设计有unsign与sign的设定,要注意设定的外键的字段与关联的字段也要保持一致。
第二种情况
外键的名字是一个已经存在的键值,要保证名字的唯一,如下:
一般创建外键名字的时候是用 表名+FK+数字来区别于其他外键 ,如上表是record表,创建的外键名字是recordFK1,recordFK2等等.
可以尝试,在外键名字后面加几个数字判断是否是这个引起的错误。
第三种情况
mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql一般的默认引擎是myisam,而myisam是不能创建外键的。
具体的判断方法以及问题处理方法大家可以去博主的另外一篇博客查看:mysql创建外键无法保存的原因及处理
第四种情况
试图创建的一个外键没有建立起索引,或者不是一个primary key 并且如果其中不是一个primary key,你必须为他创建一个索引。
第五种情况
外键的动作设置成on delete set null 或者 on update set null,但是在关联的表的字段又设置的no null,导致冲突:
(这张表是正确操作)
而错误操作是, 外键设定了 当admin的 username更新时,这张表(traffic)会跟着把关联的字段设为null
而在traffic这张表的对应 username字段(本来应该null的),但是却设定了 不允许为空,引起的冲突。
解决方法:设置为CASCADE级联更新,或者修改为允许为空。
第六种情况
在navicat设定的表格主键中 有 主键1,主键2,主键3,的区别,主键1不能被级联更新(删除)(CASCADE)
第七种情况
外键存在默认值,引起的冲突
第八种情况
混合键值缺少索引引起的情况,需要为他单独申请索引
第九种情况
在sql语句创建外键时,create 或者 alter语法错误
来源:https://blog.csdn.net/hxfghgh/article/details/80148587


猜你喜欢
- 一、匹配版本基于Camunda 7.16.0 + Springboot 2.5.8首先我们去官网找到camunda7.16对应的spring
- 前言一个简单的php➕mysql项目学生信息管理系统,用于广大学子完成期末作业的参考,该系统实现增、删、改、查等基本功能。1、登录界面<
- 如下所示:import numpy as npimport codecs, json a = np.arange(10).reshape(2
- 默认本系列的的读者已经初步熟悉tensorflow。我们通过tf.Variable构造一个variable添加进图中,Variable()构
- 文通过一个操作实例来说明SQL中主标识列IDENTITY的使用技巧。要求:在 sql server 2005中,建立数据表book,在表bo
- 一般来说,一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据
- 装对的插件,如虎添翼硬肝的人生,慎重肾重Eclipse安装插件商店安装:help - About Eclipse - Installatio
- Flask web上传获取图像Image读取并使用图片上传界面后端@app.route('/upload')def uplo
- 1.前言版本:Python3.6.1 + PyQt5写一个程序的时候需要用到画板/手写板,只需要最简单的那种。原以为网上到处都是,结果找了好
- 一、什么是sql子查询? 子查询是一个嵌套在Select 、Insert 、Update 或Dele
- 本文实例讲述了js网页滚动条滚动事件用法。分享给大家供大家参考。具体分析如下:在做js返回顶部的效果时,要监听网页滚动条滚动事件,这个事件就
- 这十则CSS技巧汇编于网络,作为老手已经司空见惯了,也没有什么新意,但温故而知新,或许阅读一遍也有一定的启发,本文主要面对CSS新手朋友,有
- mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) – TO_DAY
- 前言最近公司服务器到期,需要进行数据迁移,而数据库属于多而繁琐,通过图形化界面一个一个备份所需时间成本很大,所以想着写一个sql脚本来执行。
- 之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查
- 我使用Pytorch进行模型训练时发现真正模型本身对于显存的占用并不明显,但是对应的转换为tensorflow后(权重也进行了转换),发现P
- 这两天看了下某位大神的github,知道他对算法比较感兴趣,看了其中的一个计算数字的步数算法,感觉这个有点意思,所以就自己实现了一个。算法描
- 近期安装了python后,发现使用pycharm工具打开代码后发现代码下边会有波浪线的显示;但是该代码语句确实没有错误,通过查询发现了两种方
- 0 前言安装:pip install pypiwin32 1 Excel的APIimport win32com.client as win3
- decode()方法使用注册编码的编解码器的字符串进行解码。它默认为默认的字符串编码。语法以下是decode()方法的语法:st