mysql多表

多表设计

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

一对多(多对一)

多对多

一对一

一对多

一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。

外键约束

物理外键:(不推荐)

概念:使用 foreign key 定义外键关联另外一张表。

缺点:

影响增、删、改的效率(需要检查外键关系)。

仅用于单节点数据库,不适用与分布式、集群场景。

容易引发数据库的死锁问题,消耗性能。

逻辑外键:(推荐)

概念:在业务层逻辑中,解决外键关联。

通过逻辑外键,就可以很方便的解决上述问题。

任意一方,添加外键,关联另外一方的主键。

一对一

关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率

任意一方,添加外键,关联另外一方的主键。

多对多

通过中间表来维护,中间表的两个外键,分别关联另外两张表的主键。

多表查询

内连接

语法:

隐式内连接:select 字段列表 from 表1 , 表2 where 条件 ... ;

显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;

外连接

语法:左外连接:select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;

右外连接:select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 ... ;

子查询

语法:

介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

形式:select * from t1 where column1 = ( select column1 from t2 … );

子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是 select。

分类

标量子查询:子查询返回的结果为单个值

列子查询:子查询返回的结果为一列

行子查询:子查询返回的结果为一行

表子查询:子查询返回的结果为多行多列

标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式

常用的操作符:= <> > >= < <=

列子查询

子查询返回的结果是一列(可以是多行)

常用的操作符:in 、not in等

行子查询

子查询返回的结果是一行(可以是多列)。

常用的操作符:= 、<> 、in 、not in

表子查询

子查询返回的结果是多行多列,常作为临时表

常用的操作符:in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值