文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯