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语法毛病
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
文章来源:丸子建站
文章标题:mysql创建外键报错的缘由及解决(can't not create table)
https://www.wanzijz.com/view/61994.html