04 mvcc机制?

vvEcho 2024-01-20 14:08:37
Categories: Tags:

MVCC协议主要的两点是:读不加锁,读写不冲突;每个连接到数据库的读事务,开始时读到的都是数据库的一个快照,在写操作造成的

变化提交之前,对于其他的读事务来说都是不可见的;

当我们每次开启一个事务去读数据时,MVCC协议提供了开启事务时间点(时点(point in time))一致性视图,MVCC并发控制下

的读事务一般使用时间戳或者事务ID去标记当前读的数据库的状态(版本),通过读取这个版本的数据实现读、写事务的相互隔离,

而不需要加锁。读写并存的时候,写操作会根据目前数据库的状态,创建一个新版本,并发的读则依旧访问旧版本的数据

只有快照读的情况下,因为读到的是同一个版本的快照数据,是不会出现幻读的;

一旦我们的操作加了锁,例如新增了当前读,那么就会产生新版本的快照,那么就有可能出现读不一致的现象, 即幻读