MySQL
1.多表查询
1.1 概述
- 多表查询指从多张表中查询数据
- 多表查询会出现笛卡尔积,根据需求要删除多余的笛卡尔积
笛卡尔积:笛卡尔乘积是指在数学中,两个集合(A集合和B集合)的所有组合情况。
1.2 内连接
内连接,相当于查询A、B交集部分数据
1.2.1 隐式内连接
-- 隐式内连接
select 字段列表 from 表1,表2 where 条件
1.2.2 显示内连接
-- 显示内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件
1.3 外连接
1.3.1 左外连接
左外连接语法结构:
select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;
左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
1.3.2 右外连接
右外连接语法结构:
select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 ... ;
右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。
1.4 子查询
1.4.1 介绍
SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
-- 子查询,以where举例
select *
from 表1
where 表1的字段1 =
(select *
from 表2
where 表2的字段1 = (...),
表2的字段2 = (...),
...),
表1的字段2 =
(select *
from 表2
where 表2的字段1 = (...),
表2的字段2 = (...),
...),
...;
子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是 select。
子查询可以书写的位置:
- where之后
- from之后
- select之后
1.4.2 标量子查询
标量子查询,子查询结果为单个值[一行一列]
常用的操作符:= <> != > >= < <=
1.4.3 列子查询
列子查询,子查询结果为一列,但可以是多行
操作符 | 描述 |
---|---|
IN | 在指定的集合范围之内,多选一 |
NOT IN | 不在指定的集合范围之内 |
1.4.4 行子查询
行子查询(子查询结果为一行,但可以是多列
常用的操作符:= 、<> 、IN 、NOT IN
1.4.5 表子查询
表子查询,子查询结果为多行多列[相当于子查询结果是一张表]
2.事务
作用:保证在一个事务中多次操作数据库表中数据时,要么全都成功,要么全都失败。
2.1 操作
事务操作有关的SQL语句:
SQL语句 | 描述 |
---|---|
start transaction; / begin ; | 开启手动控制事务 |
commit; | 提交事务 |
rollback; | 回滚事务 |
手动提交事务使用步骤:
- 第1种情况:开启事务 => 执行SQL语句 => 成功 => 提交事务
- 第2种情况:开启事务 => 执行SQL语句 => 失败 => 回滚事务
2.2 四大特性
-
原子性(Atomicity) :原子性是指事务包装的一组sql是一个不可分割的工作单元,事务中的操作要么全部成功,要么全部失败。
-
一致性(Consistency):一个事务完成之后数据都必须处于一致性状态。
- 如果事务成功的完成,那么数据库的所有变化将生效。
- 如果事务执行出现错误,那么数据库的所有变化将会被回滚(撤销),返回到原始状态。
-
隔离性(Isolation):多个用户并发的访问数据库时,一个用户的事务不能被其他用户的事务干扰,多个并发的事务之间要相互隔离。
一个事务的成功或者失败对于其他的事务是没有影响。 -
持久性(Durability):一个事务一旦被提交或回滚,它对数据库的改变将是永久性的,哪怕数据库发生异常,重启之后数据亦然存在。
事务的四大特性简称为:ACID
3.索引
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。
我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引。
3.1语法
-- 创建索引
create [unique] index 索引名 on 表名 (字段名,...) ;
-- 查看索引
show index from 表名;
-- 删除索引
drop index 索引名 on 表名;
注意!!!
- 主键字段,在建表时,会自动创建主键索引
- 添加唯一约束时,数据库实际上会添加唯一索引
3.2 优缺点
3.2.1 优点
- 提高数据查询的效率,降低数据库的IO成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
3.2.2 缺点
- 索引会占用存储空间。
- 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率