SQL教程(三):外键

在这里插入图片描述


当我们利用主键唯一标识记录时,我们就可以在例如学生表中确定任意一个学生的记录

在这里插入图片描述

例如班级表

在这里插入图片描述

那么如何确定一个学生属于哪个班级呢?

很明显班级和学生的对应关系是一对多

为了实现数据表之间数据的一对多关系,需要在学生表中加入一列class_id,让其值对应班级表中的某个记录

在这里插入图片描述


外键:将数据与另一张表关联起来

ALTER TABLE students
ADD CONTRAINT fk_class_id
FOREIGN KEY class_id
REFERENCE classes(id);

ADD CONTRAINT fk_class_id:外键约束,保证关系数据库无法插入无效的数据

但是由于外键约束会降低数据库的性能,一半并不设置,而是仅靠应用程序自身来保证逻辑的正确性


删除一个外键约束:

ALTER TABLE students
DROP FOREIGN KEY kf_class_id

删除一个外键

ALTER TABLE students
DROP COLUMN class_id

删除一个外键就是删除表中的一列


多对多关系

例如:一个老师可以对应多个班级,一个班级可以对应多个老师

多对多关系实际上是通过两个一对多关系实现的

通过一个中间表关联两个一对多关系:teacher_id,class_id

在这里插入图片描述


一对一关系

一对一关系,一个表的记录对应到另一个表的唯一记录,如果业务允许完全可以两个表合成一个表

增加一列即可

只不过有一些应用会把一个大表拆成两个一对一的表

目的:将经常读取和不经常读取的字段分开,以获得更高的性能

可以作为调优的方法

例如:将一个大的用户表拆成用户基本信息表和用户详细信息表,大部分时候,只需要查询用户基本信息表即可,这样就提高了查询速度

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值