当前读:
读取的是数据库的最新数据
会对读取的数据加锁(保证其他并发事务不能修改当前读取的数据)
mysql数据库的默认隔离级别是:可重复读
开启两个事务A,B
事务A修改数据并提交事务,事务B使用select读取的还是事务B开始前的数据
事务B使用当前读 select * from temp lock in share mode; 可以读取到事务A修改后的数据
快照读:
就是普通的select读,不加锁,读取的是记录数据的可见版本,可能是历史数据,是非阻塞读
读已提交:每次select 都会生成一个快照读
可重复读:开启事务后的第一个select语句生成快照读,后边操作的都是这个快照数据
MVCC:
多版本并发控制,是指维护一个数据的多个版本,使得读写没有冲突,快照读为mysql实现MVCC提供了一个非阻塞 读功能,MVCC的具体实现还需要依赖数据库记录中的三个隐式字段(回滚指针,事务id,主键id),undo log,readView
1:隐式字段(回滚指针,事务id(自增),主键id)
2:undo log (解决事务的原子性,逻辑日志 作用:数据回滚,mvcc)
insert的时候事务提交后可被立即删除
update,delete的时候,在快照读的时候也需要,不会立即被删除
readview
RC(读已提交隔离级别)
每次select 都会生成生成readview
RR(可重复读隔离级别)
第一次select 生成readview之后复用这个readview
读未提交:有脏读,幻读,不可重复读
读已提交:有幻读,不可重复度
可重复读:有幻读问题