当前读 读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作, 如:select...lock in share mode(共享锁),select...for update、insert、delete(排他锁)都是一种当前读
快照读 简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读 对于不同的三个隔离级别,快照读的定义不同,如下
1、Read Committed: 每次执行select语句,都生成一个快照读
2、Repeatable Read:开启事务后第一个select语句才是快照读的地方(MySQL的默认隔离级别是repeatable read)
3、Serializable: 快照读会退化为当前读
MVCC 全称 Multi-Version Concurrency Control ,多版本并发控制。 指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读的功能。MVCC的具体实现,还 需要依赖于3个部分,分别为'数据库记录中的三个隐式字段'、'undo log日志'、'readView'。后面几节课会讲这3个部分