继续创作,加快成长!这是我参与「日新计划 10 月更文挑战」的第22天点击查看活动概况

SET NULL

  • 在进行测验之前,咱们先需求删去上面树立的外键 fk_emp_dept_id。然后再经过数据脚本,将 emp、dept表的数据恢复了。
  • alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null ;
  • 接下来,咱们删去id为1的数据,看看会产生什么样的现象

MySQL基础-多表查询

  • 咱们发现父表的记录是能够正常的删去的,父表的数据删去之后,再翻开子表 emp,咱们发现子表emp的dept_id字段,原来dept_id为1的数据,现在都被置为NULL了。

MySQL基础-多表查询

  • 这就是SET NULL这种删去/更新行为的作用。

多表查询

多表联系

项目开发中,在进行数据库表结构设计时,会根据事务需求及事务模块之间的联系,剖析并设计表结 构,由于事务之间相互相关,所以各个表结构之间也存在着各种联系,基本上分为三种:

  1. 一对多(多对一)
  2. 多对多
  3. 1对1

一对多

  • 事例: 部分 与 职工的联系
  • 联系: 一个部分对应多个职工,一个职工对应一个部分
  • 实现: 在多的一方树立外键,指向一的一方的主键

MySQL基础-多表查询

多对多

  • 事例: 学生 与 课程的联系
  • 联系: 一个学生能够选修多门课程,一门课程也能够供多个学生选择
  • 实现: 树立第三张中间表,中间表至少包括两个外键,分别相关两方主键

MySQL基础-多表查询

1对1

  • 事例: 用户 与 用户概况的联系
  • 联系: 1对1联系,多用于单表拆分,将一张表的根底字段放在一张表中,其他概况字段放在另一张表中,以提升操作功率
  • 实现: 在任意一方参加外键,相关另外一方的主键,而且设置外键为唯一的(UNIQUE)

MySQL基础-多表查询