mysql创建外键报错的原因及解决(can't not create table)

 更新时间:2022年09月27日 09:33:27   作者:GroovRain  
这篇文章主要介绍了mysql创建外键报错的原因及解决方案(can't not create table),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

最近在玩数据库的时候,偶尔会有外键创建不成功的时候,于是上网查阅资料,整合自己的理解有了以下这篇文章:

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语法错误

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在win10系统下安装Mysql 5.7.17图文教程

    在win10系统下安装Mysql 5.7.17图文教程

    因为想要在公司电脑上安装Mysql,于是到官网上下载了最新版本的Mysql-5.7.17,其实安装方法也很简单,下面小编把安装过程分享到脚本之家平台供大家参考
    2017-03-03
  • MySQL Packet for query is too large 问题及解决方法

    MySQL Packet for query is too large 问题及解决方法

    这篇文章主要介绍了MySQL Packet for query is too large 问题及解决方法,需要的朋友可以参考下
    2018-05-05
  • Mysql中find_in_set()函数用法详解以及使用场景

    Mysql中find_in_set()函数用法详解以及使用场景

    前几天在sql查询的时候,想要判断数据库中表的某一列中的值是否在List集合中,接触到了find_in_set的使用,用起来方便快捷,下面这篇文章主要给大家介绍了关于Mysql中find_in_set()函数用法详解以及使用场景的相关资料,需要的朋友可以参考下
    2023-03-03
  • MySQL日志维护策略汇总

    MySQL日志维护策略汇总

    这篇文章主要介绍了MySQL日志维护策略汇总,需要的朋友可以参考下
    2015-08-08
  • MySQL外键创建失败1005原因汇总

    MySQL外键创建失败1005原因汇总

    MySQL外键创建失败1005原因有很多,本文整理了一些,希望对大家有所帮助
    2014-01-01
  • MySQL中进行跨库查询的方法示例

    MySQL中进行跨库查询的方法示例

    这篇文章主要给大家介绍了关于MySQL中进行跨库查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • 如何在Windows中运行多个MySQL实例详解

    如何在Windows中运行多个MySQL实例详解

    这篇文章主要给大家介绍了关于如何在Windows中运行多个MySQL实例的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • MySQL配置文件无法修改的解决方法(Win10)

    MySQL配置文件无法修改的解决方法(Win10)

    这篇文章主要为大家详细介绍了MySQL配置文件无法修改的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • MySQL MGR 有哪些优点

    MySQL MGR 有哪些优点

    这篇文章主要介绍了MySQL MGR 有哪些优点,文中讲解非常细致,帮助大家更好的理解和学习MySQL mgr,感兴趣的朋友可以了解下
    2020-08-08
  • Mysql主从复制作用和工作原理详解

    Mysql主从复制作用和工作原理详解

    这篇文章主要介绍了Mysql主从复制作用和工作原理详解,主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库,需要的朋友可以参考下
    2019-07-07

最新评论