MySQL5.7-多表关联

系列文章目录

多表关联

1. 外键

  • 不使用外键的情况:

    先看一张表,它的部门字段中部门名称被存储了很多次,信息冗余大,极大的浪费存储空间:
    不使用外键

    但我们可以使用另外建表的方法,降低冗余。

  • 使用外键的情况:

在这里插入图片描述
这样一来,我们只需将部门名称各存一次,之后用id代替汉字,降低了信息冗余和存储大小。 查询部门的时候,只需要按照“部门id”去被参照表的对应字段中查询就可以了。

上述例子中,左边表中的“部门id”字段就是外键,用来帮助我们建立表与表之间的关系。其中,左边的表叫做参照表,右边的叫做被参照表。

  • 外键约束的语法:

    CREATE TABLE 参照表名称(
        ......
        FOREIGN KEY(外键) REFERENCES 被参照表(外键对应的被参照表的字段) 
    );
    
  • 表与表之间的四种关系:

    一对多关系、多对多关系、一对一关系、没有关系。

2. 一对多关系

  • 一对多关系的概念:

    比如王老师(只有一个)和他所教的学生(有很多个)之间,就是一对多的关系。

    在一对多关系中,外键要定义在多的一方(学生)。

    注意!在创建参照表(学生)之前,要先创建被参照表(老师表),不然会报错。在新增记录的时候,也是如此。

  • 级联更新和级联删除:

    参照表的外键,如果设置了级联更新和级联删除,那么参照表在更新或删除记录时,被参照表的记录也会被一并更新或删除。

    语法为:在外键约束后面写上:

    ON UPDATE CASCADE  # 级联更新
    ON DELETE CASCADE  # 级联删除
    

    通常情况下,外键后面都要写这两个约束。

3. 多对多关系

  • 多对多关系的概念:

    比如某班级的所有任课老师(数学老师、英语老师等,有多个)和该班级所有的学生之间(也有多个),就是多对多的关系。

    在多对多关系中,通常要单独建一张新的关系表,存放对相应关系。而这个关系表与另外两张表都是多对一关系

在这里插入图片描述
之后就可以按照一对多关系,将外键设置在多的一方。上图中,外键应该设置为“老师id”和“学生id”。

4. 一对一关系

如果一张表里面有很多字段,但并不是所有字段都很常用。那么,就应该将不常用的字段拆分出去,组件另一张表。这两个表之间通常就是一对一关系。

我们可以直接使用外键进行关联,但此时的外键必须是唯一的。并且,外键可以设置在任何一方,但推荐设置在使用频率较高的一方。

下一篇

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值