MySQL概述
基础篇
通用语法及分类
DCL
DQL
DML
DDL
函数
字符串函数
数值函数
日期函数
流程函数
约束
常用约束
外键约束
多表查询
多表关系
查询
内连接查询
外连接查询
自连接查询
联合查询
子查询
事务
进阶篇
存储引擎
性能分析
查看执行频次
慢查询日志
profile
explain
索引
索引结构
索引分类
语法
使用规则
设计原则
SQL 优化
插入数据
主键优化
order by优化
group by优化
limit优化
count优化
update优化(避免行锁升级为表锁)
视图
存储过程
触发器
锁
InnoDB 引擎
事务原理
MVCC
数据类型
权限一览表
图形化界面工具
MVCC - MySql学习文档 - 笔下光年
网站首页
MVCC
### 当前读: 读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如: * select...lock in share mode(共享锁)。 * select..…for update、update、insert、delete(排他锁)都是一种当前读。 ### 快照读: 简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。 * Read Committed:每次select,都生成一个快照读。 * Repeatable Read:开启事务后第一个select语句才是快照读的地方。 * Serializable:快照读会退化为当前读。 ### MVCC: 全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。 #### MVCC 实现原理: 有三个隐藏的字段:  > undo log回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。 > 当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。 > 而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除。 undo log 版本链: undo log日志会记录原来的版本的数据,因为是通过undo log 日志进行回滚的。  如何确定返回哪一个版本 这是由read view决定返回 undo log 中的哪一个版本。  > RC隔离级别下,在事务中每一次执行快照读时生成ReadView。 > RR隔离级别下,在事务中第一次执行快照读时生成ReadView,后续会复用。 > https://www.bilibili.com/video/BV1Kr4y1i7ru?p=145&spm_id_from=pageDriver&vd_source=bbc04b831b54029788a178a7c2e9ae20 MVCC 靠 隐藏字段 , undo log 版本链 , read view 实现的。 * 原子性-undo log * 持久性-redo log * 一致性-undo log + redo log * 隔离性-锁 + MVCC 
上一篇:
事务原理
下一篇:
数据类型