Mysql数据库安装使用教程11:实体表对应关系、外键

1、实体表对应简介

  • 当我们记录表信息时如果字段过多或是同样的一批数据应用场景不同导致会建立多个表,我们会选择分两个实体表甚至多个实体表来存储数据信息,那么怎么让这两个或是多个实体表中的每个数据信息相互对应。假设我们有两张表,表A与表B,两张表中的信息都是某个班级人员的信息,只是存储的字段不同。那么怎么让A表中张三的信息对应B表中张三自己的信息,这个就是实体表的对应关系。对应关系可以是:一对一、一对多(多对一)、多对多。
(1)、一对一:
  • 一对一:两个实体表内有共同的主键字段,字段值一致则可以相互对应。比如某个班级所有学生期中考试与期末考试这两张表,我需要查看整个学期同学的考试成绩,此时就必须是一对一关系,即期中考试表中张三信息只能对应期末考试表中张三的信息。
  • 设计思路:两个实体表内有共同的主键字段,如果A表中主键值与B表中主键值一致则两条数据相互对应。
  • Mysql数据库安装使用教程11:实体表对应关系、外键
(2)、一对多:
  • 一对多(多对一):一个实体对应多个其他实体,比如班级与学生关系,一个班级对应多个学生,多个学生对应一个班级。建立两张表:学生表是存储所有学生的信息,班级表是存储班级信息。
  • 设计思路:在多的那段增加一个字段用于指向该实体所属的另外实体的标识;
  • Mysql数据库安装使用教程11:实体表对应关系、外键
(3)、多对多:
  • 多对多:老师和班级的关系,多个老师对应多个班级(老师不可能只代你一个班级,也会代别的班级,这个上过小学的基本都知道。)
  • 设计思路:新增一中间表,用于表示两个实体表自己的多对多对应关系;
  • Mysql数据库安装使用教程11:实体表对应关系、外键

2、外键 poreign key

(1)、概念以及相关理解:
  • 如果一个实体表(A)的你某个字段(B_ID)指向另一个实体表(B)的主键(B_ID),则称实体表A的A_ID是外键(即从表中的外键字段必须复写主表的这个主键字段)。
  • 被指向的实体称之为主实体(主表),也叫父实体(父表),负责指向的实体称之为从实体(从表),也叫子实体(子表)。在哪个表中写了外键语句这个表就是子表。
(2)、外键的作用:
  • 用于约束关系内的实体
  • 增加子表记录时是否有与之对应的父表记录(即在子表中新增数据时,如果父表中这个字段没有对应的值,则数据新增会失败,解决方法是现在父表中添加这个字段对应的值。)
  • 在删除或是更新父表时,从表应该如何处理相关记录;
(3)、定义一个外键以及实例讲解:
  • 在从表上增加一个外键字段指向主表的主键,关键字:poreign key
  • 语句格式:foreign key(外键字段) references 主表名(关联字段)

实例讲解1:,增加子表记录时是否有与之对应的父表记录:

  • 如下实例:,A表是子表,B表是父表,要将B_id设置为外键,所以A表复写B表的主键字段B_id,由于B表中的B_id为空,A表插入数据时指定了B_id字段的值,但是B表中没有这个值对应所以会失败。
    Mysql数据库安装使用教程11:实体表对应关系、外键
    Mysql数据库安装使用教程11:实体表对应关系、外键
    Mysql数据库安装使用教程11:实体表对应关系、外键
    Mysql数据库安装使用教程11:实体表对应关系、外键
    Mysql数据库安装使用教程11:实体表对应关系、外键

实例讲解2: 在删除或是更新父表时,从表应该如何处理相关记录;

  • 主表更新数据关键字:on updata
  • 主表删除数据关键字:on delete
  • 允许级联动作关键字:cascade,即如果主表更新或是删除数据则从表也会进行更新删除操作;
  • 设置为nu关键字:set null,即主表更新或是删除从表不指向任何主表记录
  • 拒绝主表的相关操作关键字:restrict
  • on updata set null:表示主表更新时,子表外键字段设置为空;
  • on updata cascade:表示主表跟新时,子表外键字段也同步更新;
  • 其他组合设置也按以上理解即可。

以上设置可以在设置外键的时候就设置,如果我们已经设置好了外键但是没设置级联操作,不能直接在外键上添加相关设置,要先删除外键在添加新设置的外键才行。

删除外键格式:alter table 表名 drop foreign key 外键符号名;外键符号名不是外键名,这个一般创建外键后mysql会自动成功,或是你在创建的时候单独定义也可以。通过命令:show create table 表名;查看外键的符号名。
Mysql数据库安装使用教程11:实体表对应关系、外键
重新给子表A增加外键:语句格式为alter table表名 add foreign key(外键字段名) references 主表名(外键字段名) 级联操作语句
Mysql数据库安装使用教程11:实体表对应关系、外键
Mysql数据库安装使用教程11:实体表对应关系、外键
其他级联操作同理即可。再举一个例子,级联操作设置为on delete cascade,即主表删除数据子表中也会将此外键对应的数据删除:

Mysql数据库安装使用教程11:实体表对应关系、外键
Mysql数据库安装使用教程11:实体表对应关系、外键