​​Navicat添加Mysql数据库外键详细操作步骤!

​​Navicat添加Mysql数据库外键详细操作步骤!

 

这篇文章主要介绍了Navicat添加外键详细操作步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小琥来一起学习学习吧。

 

例子1:

前言

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

正文

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

006fRELkly4h1ad97w1y4j3076024q2q
006fRELkly4h1ad97qcl6j30d30dqt98

打开student的设计表。

006fRELkly4h1ad97qksgj30qu0aigmp
006fRELkly4h1ad97o89bj30kr074jry

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

006fRELkly4h1ad97ogupj30p20950tb

当勾选允许为空之后

006fRELkly4h1ad97pcxej30jc074jru

再去保存就可以了。

还有必须注意,Engin必须为InnoDB。

006fRELkly4h1ad97p8c5j30o60g2dgh

总结一下:

外键条件

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

  • 外键要存在,首先必须保证表的引擎是 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

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

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

 

 

例子2:

 

打开Navicat连接上数据库, 并建立新的数据库:“test”;

在数据库“test”中创建两个表“emp”(主表)和“dept”(从表)

“emp”(主表—员工表)

006fRELkly4h1adayk1y1j30ed06ywep

 

006fRELkly4h1adaykpvvj30fi00zaa0

“dept”(从表—部门表)

006fRELkly4h1adazego7j30ef0bfjrr

 

006fRELkly4h1adayitqgj30fi01e3yk

将“emp”(主表)和“dept”(从表)中选项设置

 表类型:InnoDB,    字符集:utf8 – UTF-8 Unicode(默认),    整理: utf8_general_ci(默认),    自动递增: 自己设置(主表emp与从表dept必须相同)  
006fRELkly4h1adaz2nktj30a908djrg

 

006fRELkly4h1adaykqolj30ac07smxb

4.设置外键

006fRELkly4h1adaypcgrj30fi03o3za

 

006fRELkly4h1adb1bsn0j30pn02jgm9
外键名(name):可以不填, 系统自动生成;  栏位名(Field Name): 就是设置‘dept_id’为外键;  参考数据库(Reference DadaBase): 外键(‘dept_id’)关联的数据库;  引用表(Reference Table): 关联的表, 这里是dept表;  外栏位名(Outside field name): 关联的字段(这里是“dept_id”, 可以与栏位名相同);  删除时:删除时候选择的动作(这里选择CASCADE);  刷新时:更新时候选择的动作(这里选择CASCADE)CASCADE ---就是当关联的表更新后, emp中的dept_id也随着更新。 

CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录

SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)

NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

RESTRICT
同no action, 都是立即检查外键约束

SET NULL
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

注意:

添加外键数据库引擎必须为InnoDB;  关联的字段数据类型必须一样;  从表中的关联字段数据,必须在主表中。 

5.使用Navicat在MySQL中添加外键完成。

例子2转载于:https://www.cnblogs.com/blovedr/p/9211283.html

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

2022021703525891-52

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>