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

作者:GroovRain 时间:2024-01-15 11:57:44 

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

mysql创建外键不成功的原因及处理方法

第一种情况

外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配):

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

两个不同的表格(一个是record(借书记录表),一个是reader(读者信息表)):然后关联的两个readerid 字段要保持一致,包括长度,类型要保持一致。

然后是编码格式

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

两个表的引擎,字符集要保持一致,这样才能关联成功;

另外,若读者对表的设计有unsign与sign的设定,要注意设定的外键的字段与关联的字段也要保持一致。

第二种情况

外键的名字是一个已经存在的键值,要保证名字的唯一,如下:

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

一般创建外键名字的时候是用 表名+FK+数字来区别于其他外键 ,如上表是record表,创建的外键名字是recordFK1,recordFK2等等.

可以尝试,在外键名字后面加几个数字判断是否是这个引起的错误。

第三种情况

mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql一般的默认引擎是myisam,而myisam是不能创建外键的。

具体的判断方法以及问题处理方法大家可以去博主的另外一篇博客查看:mysql创建外键无法保存的原因及处理

第四种情况

试图创建的一个外键没有建立起索引,或者不是一个primary key 并且如果其中不是一个primary key,你必须为他创建一个索引。

第五种情况

外键的动作设置成on delete set null 或者 on update set null,但是在关联的表的字段又设置的no null,导致冲突:

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

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

(这张表是正确操作)

而错误操作是, 外键设定了 当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

标签:mysql,创建,外键,报错
0
投稿

猜你喜欢

  • MySQL的指定范围随机数函数rand()的使用技巧

    2024-01-17 15:25:50
  • SQL Server的链接服务器技术小结

    2024-01-17 03:41:22
  • Tkinter组件Entry的具体使用

    2023-03-21 00:41:40
  • python热力图实现简单方法

    2023-10-28 06:14:41
  • mysql复制表的几种常用方式总结

    2024-01-25 12:11:59
  • MySQL5.7主从复制详细配置教程

    2024-01-17 18:19:32
  • javascript实现页面的实时时钟显示示例

    2024-04-10 10:49:07
  • 聊一聊MyISAM和InnoDB的区别

    2024-01-21 00:55:33
  • tensorflow-gpu2.3版本安装步骤

    2022-11-25 09:35:40
  • python3+opencv生成不规则黑白mask实例

    2023-10-06 11:01:25
  • 使用python制作游戏下载进度条的代码(程序说明见注释)

    2023-06-15 00:39:52
  • Python面向对象程序设计示例小结

    2023-08-24 13:31:24
  • 谈谈Python进行验证码识别的一些想法

    2022-09-19 12:50:53
  • python判断完全平方数的方法

    2023-07-12 06:43:13
  • django之导入并执行自定义的函数模块图解

    2023-07-27 02:45:19
  • mysql分页原理和高效率的mysql分页查询语句

    2024-01-22 00:07:39
  • Python学习之书写格式及变量命名

    2023-08-23 14:53:08
  • python opencv 简单阈值算法的实现

    2023-04-04 04:23:03
  • MySql常用操作SQL语句汇总

    2024-01-21 00:11:53
  • 经典的退出浏览器弹窗代码

    2008-07-30 12:48:00
  • asp之家 网络编程 m.aspxhome.com