Docs/数据库/mysql/MVCC.md
2022-10-18 16:59:37 +08:00

1,015 B
Raw Blame History

在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。即对数据做了快照。

快照读 (snapshot read):读取的是记录的可见版本 (有可能是历史版本)不用加锁共享读锁s锁也不加所以不会阻塞其他事务的写

当前读 (current read):读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录

InnoDB的MVCC是通过在每行纪录后面保存两个隐藏的列来实现的。这两个列一个保存了行的创建时间一个保存了行的过期时间或删除时间当然存储的并不是实际的时间值而是系统版本号。每开始一个新的事务系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号用来和查询到的每行纪录的版本号进行比较