1、MVCC
MVCC全称是Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,使用更好的方式去处理读写冲突,做到即使有读写冲突时,也可以不加锁,非阻塞并发。
2、当前读
select lock in share mode(共享锁),select for update; update;insert;delete(排他锁)这些操作都是当前读。
为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。
3、快照读
不加锁的select操作就是快照读,即不加锁的非阻塞读。快照读的前提是隔离级别不是串行级别,串行级别下快照读会退化为当前读。之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销。既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是历史版本。
4、当前读,快照读,MVCC的关系
MVCC多版本并发控制指的是维持一个数据的多个版本,使得读写操作没有冲突,快照读是MySQL为实现MVCC的一个非阻塞i读功能。MVCC模块在MySQL中具体实现是由三个隐式字段、undo日志、read view三个组件来实现的。