博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql之外键约束
阅读量:5833 次
发布时间:2019-06-18

本文共 1411 字,大约阅读时间需要 4 分钟。

1.什么是外键

  A表的主键,在B表中字段出现,就是外键。

2.什么是约束:约束是一种限制,它通过对表的行货列的数据做出限制,来确保表的数据的完整性、唯一性。比如人员表中有一列是部门id,当新增一个人员的时候,我们不需要手动的在部门id字段给这个人员设置一个部门,而是新增则个新人员记录的时候默认就会有一个部门id给了这个人员,这就是约束。

 

3.以上1和2结合一起就是外键约束。即:foreign key

 

4.具体操作

4.1创建表时,同时创建外键约束

4.2已创建表后,追加外键约束

(1)添加外键方法

-- CONSTRAINT 就是创建外键约束 fk_id是外键约束的名字-- foreign key (dept_id) references dept(did)意思是设置person表中的dept_id字段和dept表中的did字段关联,dept表中的did字段就是person表中的dept_id的外键约束,这个外键约束的名字叫做fk_id,一般潜规则外键约束的名字开头是fk_alter table person add CONSTRAINT fk_id foreign key (dept_id) REFERENCES dept(did);

 

此时可以发现在person表中的,点击外键按钮,可以看到创建出来的外键

栏位表示的是person表中的dept_id字段,参考栏位的did就是person表中的dept_id字段的约束,dept_id字段的值被约束为dept字段did字段的值

 

 

  主表就是外键约束有约束值的那个表

从表就是被约束的那个表

(2)外键约束的4种类型,RESTRICT、NO ACTION、CASCADE、SET NULL主要针对于外键里的删除时和更新时

 

RESTRICT(约束):如果出现在删除时,意思是约束外键主键did记录(主表中的记录)不能直接删除,必须先删除被约束的表(从表)字段中dept_id所有这个外键主键值对应的记录,才能删除外键约束(主表中的记录)

NO ACTION:

CASCADE:删除选择这个时,删除主表中的记录时,主表中的这个主键id关联的从表的这个id值所在的记录也会被删除。建议不选。

SET NULL :删除选择这个时,如果从表(被约束的字段所在的表中)被约束的字段的值设置为可以为空时,那么当删除主表的记录时,主表中被删除的这个记录对应的主键值(约束从表字段的那个值)在从表中对应的字段中出现的那个记录的被约束字段的值就会变为NULL。

最常用的是选择RESTRICT不让删的这个约束、或者选择SET NULL删除后值表为空。

目前公司都不太喜欢使用这种真实的外键约束,而是使用虚拟的外键约束。虚拟外键约束:就是人员表中的部门id字段中的id值是部门表中的主键id的值,这就是虚拟外键约束,也是目前来说比较流行使用的。

(3)删除外键

-- 删除外键约束alter table person DROP foreign key fk_id;

 

 

5.其他约束类型

 

-- 向t5表中插入两条记录,第二值用的都是默认值,如果是默认值则可以不填或填defaultinsert into t5 values(3, DEFAULT), (4, DEFAULT);

 

转载于:https://www.cnblogs.com/whylinux/p/9905134.html

你可能感兴趣的文章
[心得]关于新的挑战
查看>>
结对编程2
查看>>
python 3.6 链接mssql 进行数据操作
查看>>
颤抖吧,Css3
查看>>
Redis集群命令
查看>>
6.19心得
查看>>
西门子_TDC_数据耦合小经验
查看>>
接口测试与postman
查看>>
【转载】Nginx + Tomcat 实现反向代理
查看>>
Mac下,如何把Github上的仓库删除掉
查看>>
9.18考试 第一题count题解
查看>>
mac zsh选择到行首的快捷键
查看>>
js的apply方法使用详解,绝对NB
查看>>
linux使用crontab实现PHP执行定时任务(转)
查看>>
LINQ To XML的一些方法
查看>>
C++成员初始化顺序
查看>>
[LeetCode] Copy List with Random Pointer
查看>>
openstack部署之nova
查看>>
QNX 线程 调度策略 优先级 时钟频率 同步
查看>>
day20-视图获取用户请求相关信息以及请求头
查看>>