它的实现原理主要是版本链,undo日志 ,Read View来实现的
1 当前读和快照读
1.1 当前读(Current Read)
指读取最新的数据版本,即使这些数据是由其他事务修改但尚未提交的。
特点
- 读取最新数据:当前读总是读取最新的数据版本。
- 加锁:当前读会对读取的数据加锁,以防止其他事务同时修改这些数据。
- 一致性:确保在当前事务中,读取的数据是最新的,并且在事务提交之前,其他事务无法修改这些数据。
1.2 快照读(Snapshot Read)
每个事务在开始时会创建一个一致性视图(Consistent View),快照读是在读取数据时读取一个一致性视图中的数据。
特点
- 读取快照数据:快照读读取的是数据在某个时间点的一致性视图,而不是最新的数据版本。
- 不加锁:快照读不会对读取的数据加锁,因此不会阻塞其他事务的读写操作。
- 一致性视图:快照读确保在同一个事务中,多次读取相同的数据,结果是一致的。
2 mvcc实现原理
2.1 undo log
启动事务之前,会先将要修改的数据记录存储到Undo Log中。
2.2 版本链
不同事务或者相同事务对同一记录行的修改,会使该记录行的 undo log 成为一条链表,链首就是最新的记录,链尾就是最早的旧记录