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
猜你喜欢
- 本文实例讲述了Python实现二维数组按照某行或列排序的方法。分享给大家供大家参考,具体如下:lexsort支持对数组按指定行或列的顺序排序
- 字段是Python是字典中唯一的键-值类型,是Python中非常重要的数据结构,因其用哈希的方式存储数据,其复杂度为O(1),速度非常快。下
- 有很多原因需要控制用户访问站点的某部分。一个简单原始的限制方法是检查 request.user.is_authenticated() ,然后
- 在网页设计发展到一定阶段的时候就必然会和其他学科或领域只是产生交汇和共鸣,在阅读《超越CSS:web设计艺术精髓》这本书的时候,发现原来we
- 删除一条留言信息会级联删除回复信息,这时我们需要用到事务,如下SQL 代码如下:ALTER PROCEDURE [dbo].[proc_tb
- scratch-blocks编译的时候会出现的问题:scratch-gui依赖的scratch-blocks模块在安装的时候编译会报错。原因
- 一.图像金字塔原理上一篇文章讲解的图像采样处理可以降低图像的大小,本文将补充图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp(
- 本文实例讲述了Python实现读写INI配置文件的方法。分享给大家供大家参考,具体如下:# -*- coding: utf-8 -*-imp
- 本文实例讲述了Python通用循环的构造方法。分享给大家供大家参考,具体如下:1.交互循环是无限循环的一种,允许用户通过交互的方式程序的特定
- 1 安装说明1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://ubuntu.co
- 国产框架thinkPHP,是一款MVC框架,这个框架最初模拟JAVA的struts框架,使用单一入口文件模拟JAVA的过滤器,使用actio
- 你好,一般情况下,Ctrl+C 是最简单的方法,当无法 Ctrl+C 时,我们借助于 Python,以下是具体步骤:第一步,安装工具库1、t
- 本文实例为大家分享了Python实现打乒乓小游戏的具体代码,供大家参考,具体内容如下源码奉上:import sysimport cfgimp
- 一步步教你怎么用Python画雪人,进一步熟悉Python的基础画图操作,废话不多说,上代码。希望您给个关注给个赞,也算对我们的支持了。cl
- 当然这应该属于正常过滤手法,而还有一种过滤HTML标签的最终极手法,则是将一对尖括号及尖括号中的所有字符均替换不显示,该方法对于内容中必须描
- UCD介绍UCD是Unicode字符数据库(Unicode Character DataBase)的缩写。UCD由一些描述Unicode字符
- 在python中调用fortran代码,要用到f2py这个程序。它的项目主页在此。现在该项目已经合并到numpy中了,先安装python再装
- 笔者需要tensorflow仅运行在一个GPU上(机器本身有多GPU),而且需要依据系统参数动态调节,故无法简单使用CUDA_VISIBLE
- 本文实例为大家分享了Python实现图形用户界面计算器的具体代码,供大家参考,具体内容如下简易用户图形界面计算器设计思路:简易图形用户界面计
- <SCRIPT language=JavaScript> <!-- var layerTo