事务
事务的特性
- 原子性:事务内的操作要么全部完成,要不全部不完成。执行事务过程中出现错误,将执行回滚将数据还原至事务开始前的状态
- 一致性:
- 隔离性:
- 持久性:事务执行完成后,数据将保存在硬盘上
视图
视图是什么
查询
关联查询
- 左连接:以左表数据去查询右表,如果右表没有关联数据,则该行右表的所有列为null
表1 left join 表2 on 字段1 = 字段2
- 右连接:以右表数据去查询左表,如果左表没有关联数据,则该行左表数据为null
表1 right join 表2 on 字段1 = 字段2
- 外连接:执行左连接和右连接,并返回两个结果的和
表1 full join 表2 on 字段1 = 字段2
- 内连接:只返回符合on条件的数据,当任一表找不到数据时该行不返回
表1 join 表2 on 字段1 = 字段2
- 交叉连接:将所有可能的组合都查询出来,结果集大小=表1行数*表2行数
数据库范式
第一范式
- 第一范式是对关系模式的基本要求
- 第一范式规定每一列包含的数据不可再分
第二范式
- 实现第二范式前必须先满足第一范式
- 第二范式规定表必须拥有一个主键列
第三范式
- 实现第三范式必须先满足第二范式
- 第三范式规定表内的字段应该消除冗余,不与其他表的字段重复
数据库优化
SQL语句优化
- 避免使用比较符:在where语句中使用!=,<>等会使引擎放弃使用索引
- 避免判断是否null:在wherer语句判断字段=null也会放弃使用索引
- 使用where避免使用having:where是可以使用索引直接获取指定数据,而having是在获取到数据后再进行结果筛选
数据结构优化
- 范式优化:减少冗余,降低使用空间
- 反范式优化:增加冗余,减少关联查询
- 表拆分:水平拆分和垂直拆分
- 水平拆分:分散单表数据体积
- 垂直拆分:分散单表读写的io压力