?? 个人主页:的博客主页
支持我:?? 点赞 ?? 收藏 ??关注
?? 格言:一步一个脚印才能承接所谓的幸运本文来自专栏:MySQL8.0学习笔记
本文参考视频:MySQL数据库全套教程
欢迎点击支持订阅专栏
文章目录
1 多表关系
?? 一对一关系
- 比如:一个人有一个身份证,一个身份证对应一个人;
- 实现原则:在任一表中添加唯一外键,指向另一方主键;
- 在实际开发中遇到一对一情况比较少,遇到一对一关系一般合并表。在下图中,可以将两个表根据 id 合并:
?? 一对多/多对一关系
- 比如:一个部门有多个员工,一个员工只能对应一个部门;
- 实现原则:在多的一方建立外键,指向另一方的主键, 示意图如下:
?? 多对多关系
- 比如:一个学生可以修多个课程,一个课程也可以被多个学生选择;
- 实现原则:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,折成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来两个表的主键, 示意图如下:
2 外键约束(FOREIGN KEY)
2.1 外键约束说明
?? 简介:
MySQL 外键约束是表的一种特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键约束用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
?? 举例说明:
在下图中,从表中的部门号受主表中的主键部门号的范围限制, 即,从表中的部门号列只能取值为1001、1002或1003。
?? 定义外键的规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表(即在创建外键时,主表必须存在);
- 必须为主表定义主键;
- 主键不能包含空值,但允许在外键中出现空值;
- 在主表的表名后面指定列名或列名的组合,这个列或者组合必须是主表的主键或候选键;
- 外键中列的数目必须和主表的主键中列的数目相同(通俗解释:主键的列数必须与外键的列数相同);
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
2.2 外键约束的创建
?? 1.在创建表时设置外键约束
在 create table
语句中,使用 foreign key
关键字来指定外键。具体语法格式如下:
[constraint <外键名>] foreign key 字段名1 [, 字段名2, ...]
references <主表名> 主键列1, [, 主键