mysql na加外键_Navicat添加外键详细操作步骤

本文详述了在Navicat中为MySQL数据库的表添加外键约束时遇到的问题及解决方法,包括外键字段类型、允许为空、引擎类型的要求,并介绍了外键约束的三种模式:严格、级联和置空。通过设置正确的约束模式和满足外键条件,可以成功创建外键关系。
摘要由CSDN通过智能技术生成

前言

用navicat为mysql数据库的两个表之间建立外键关系,出现“cannot add foreign key constraint”错误,操作了很久不知道怎么回事,发现竟然是。。。。

正文

想要建立class表与student表之间的外键连接,class为父表,student为子表

ba98143835e5d1838ecc6088daf5daec.png

c04fa6bf344ebb366fa1e86a5f4c221c.png

打开student的设计表。

6fb72c71bc9aaa3397b11654760c7df7.png

618770c345481c704ea5873b8a794ce5.png

如果c_id不允许为空则当,选择删除时-->>set null就会出现cannot add foreign key constraint的提示,这是因为删除置空有条件,必须满足字段允许为空(如果不满足,外键无法创建)当然,如果不允许为空,可以选择删除时-->>cascade也可以建立外键。

6e21c0310d762e1097246312f71a9111.png

当勾选允许为空之后

96932e1899f167a8708f191886ae59ec.png

再去保存就可以了。

还有必须注意,engin必须为innodb。

976621084cd97a7c9be1fb76bb2d89ff.png

总结一下:

外键条件

在我们使用外键的时候,应该遵循如下条件:

外键要存在,首先必须保证表的引擎是 innodb(默认的存储引擎),如果不是 innodb 存储引擎,那么外键可以创建成功,但没有约束作用;

外键字段的字段类型(列类型),必须与父表的主键类型完全一致;

每张表中的外键名称不能重复;

增加外键的字段,如果数据已经存在,那么要保证数据与父表中的主键对应。

如果外键约束模式选择set null ,那么字段必须允许为null,否则出现cannot add foreign key constraint。

外键约束

所谓外键约束,就是指外键的作用。之前所讲的外键的作用都是默认的作用,实际上,可以通过对外键的需求,进行定制操作。

外键约束有三种模式,分别为:

district:严格模式(默认),父表不能删除或更新一个已经被子表数据引用的记录;

cascade:级联模式,父表的操作,对应子表关联的数据也跟着被删除;

set null:置空模式,父表的操作之后,子表对应的数据(外键字段)被置空。

设计外键的界面,有七列:

名(name):可以不填,保存时会自动生成。

栏位(fieldname):要设置的外键,如:student 里的c_id

参考数据库(reference database):外键关联的数据库

被参考表(reference table):关联的表,这里是class表

参考栏位(forgin filed names):关联的字段,class里的id

删除时(ondelete):删除时候的动作,当时我选择的是setnull

更新时(onupdate):更新时候的动作,我选择的是cascade

以上字段也可以按照自己的需求填写,设置完成后保存即可。

某个表已经有记录了,添加外键失败,这时候只需要将两个要关联的表中的数据清空再从新添加外键关系即可。

到此这篇关于navicat添加外键详细操作步骤的文章就介绍到这了,更多相关navicat添加外键内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值