MVCC是什么
MVCC (Multiversion Concurrency Control),多版本并发控制。
MVCC是通过数据行的多个版本管理来实现数据库的并发控制的。
MVCC使得在InnoDB的事务隔离级别下执行一致性读操作有了保证,换句话说,就是为了查询一些正在被另一个事务更新的行,并且可以看到他们被更新之前的值,这样在做查询的时候就不需要等待另外一个事务释放行锁
快照读和当前读
MVCC在MySQL InnoDB中的实现主要是为了提高数据库的并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读,而这个读指的就是快照读,而非当前读。当前读实际上是一种加锁的操作,是悲观锁的实现,而MVCC是乐观锁
我将MVCC与CopyOnWrite做比较,在java中底层就是写时复制技术,我觉得两者是互通的。
MVCC的实现原理
其实本质就是Undo log链
MVCC如何解决幻读问题
MVCC默认就是解决了不可重复读和幻读的问题的,MVCC有个ReadView,对应的就是undo log版本链,用户线程进来查询的那条记录,如果有人要进行修改,则会将修改后的内容引一个指针出来指向旧的数据,这样用户线程读取的一直都是之前的那个版本的数据,自然也就解决了不可重复读和幻读的问题了。