- 内联接(Inner Join):匹配2张表中相关联的记录 。(2张表中没有关联的部分抛弃)
- 左外联接(Left Outer Join):除了匹配2张表中相关联的记录外 , 还会匹配左表中剩余的记录 , 右表中未匹配到的字段用NULL表示 。(以左边记录匹配 , 如果右表中没有记录与其匹配 , 字段值为NULL)
- 右外联接(Right Outer Join):除了匹配2张表中相关联的记录外 , 还会匹配右表中剩余的记录 , 左表中未匹配到的字段用NULL表示 。(以右边记录匹配 , 如果左表中没有记录与其匹配 , 字段值为NULL)
- 脏读(Dirty read) , 当一个事务读取了数据 , 并且修改了 , 但还未提交到数据库中 , 另外一个事务也读取了数据 , 并且使用了该数据 , 这时另外一个数据读取到的数据就是“脏数据” , 根据“脏数据”所做的处理可能是不正确的 。
- 丢失修改(Lost to modify) , 当一个事务读取了数据 , 另外一个事务也读取了数据 , 在第一个事务修改了数据后 , 第二个事务也修改了数据 , 这样第一个事务的修改则被丢失 , 因为为“丢失修” , 例如事务1读取了数据A=20 , 事务2也读取了A=20 , 事务1修改A=A1 , 事务2也修改A=A-1 , 最终结果为A=19 , 事务1的修改被丢失了 。
- 不可重复读(Unrepeatableread) , 指一个事务多次读取1个数据 , 在这个事务还未结束时 , 另外一个事务也访问该数据 , 如果第二个事务修改了数据 , 导致第一个事务的多次读取的数据结果可能是不一样的 , 因此成为不可重复读 。
- 幻读(Phantom read) , 幻读和不可重复读类似 , 它发生在一个事务读取了几行数据 , 接着另外一个事务插入了一些数据 , 在随后的查询中 , 第一个事务发现多了一些原本不存在的数据 , 就像产生了幻觉一样 , 所以称为幻读 。
- 不可重复读的重点是修改 , 例如多次读取一条记录 , 发现记录的某一列的值被修改 。
- 幻读的重点是新增或减少 , 例如多次读取 , 发现记录增多或减少了 。
- READ-UNCOMMITTED(读取未提交):最低的隔离级别 , 允许读取尚未提交的数据变更 , 可能会导致脏读、幻读或不可重复读 。
- READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据 , 可以阻止脏读 , 但是幻读或不可重复读仍有可能发生 。
- REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的 , 除非数据是被事务本身自己所修改 , 可以阻止脏读和不可重复 读 , 但幻读仍有可能发生 。
- SERIALIZABLE(可串行化): 最高的隔离级别 , 完全服从ACID的隔离级别 。所有的事务依次逐个执行 , 这样事务之间就完全不可能产生干扰 , 也就是说 , 该级别可以防止脏读、不可重复读以及幻读 。
- MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) , 我们可以通过 SELECT @@tx_isolation; 命令来查看 。
大表如何优化?
- 限定查询数据的范围 , 例如查询订单历史时 , 控制查询一个月内的订单 。
- 读、写分离 , 主库复写写 , 从库负责读 。
- 垂直分区 , 例如用户表既有用户的登录信息 , 也有用户的基本信息 , 可以进行垂直拆分 , 把用户表拆分为2张表 , 就是把数据列拆分到多张表 。
推荐阅读
- 袁天罡的后人是谁 历史上有袁天罡这个人吗
- Mysql数据库实现主从同步,看这一篇就够了
- 10分钟自建企业级Docker镜像仓库!这个开源项目太顶了
- 电视机顶盒和网络机顶盒哪个好?
- Python自带爬虫库urllib使用大全
- 癫痫的前兆有哪些症状
- 如何治疗痔疮的小窍门
- 皮肤受损后该如何修复
- 西装|辣目洋子教你玩转西装穿搭,微胖女生这样穿也能在职场脱颖而出
- 老年人脚麻木吃什么药