57、停一停脚步:梳理一下数据库的多事务并发运行的隔离机制
今天给大家简单梳理一下MySQL中的多事务并发运行的隔离原理,其实这套隔离原理,说白了就是MVCC机制,也就是multi-versioin concurrent control,就是多版本并发控制机制,专门控制多个事物并发运行的时候,互相之间会如何影响。
首先我们先要明白,多个事物并发运行的时候,同时读写一个数据,可能会出现脏写、脏读、不可重复读、幻读几个问题
所谓的脏写,就是两个事务都要更新一个数据,结果有一个人回滚了把另外一个人更新的数据页回滚没了。
脏读,就是一个事务读到了另外一个事务没提交的时候修改的数据,结果另外一个事务回滚了,下次读就读不到了。
不可重复读,就是多次读一条数据,别的事务老是修改数据值还提交了,多次读到的值不同。
幻读,就是范围查询,每次查到的数据不同,有时候别的事务插入了新的值,就会读到更多的数据。
针对这些问题,所以才有RU、RC、RR和串行四个隔离级别
RU隔离级别,就是可以读到人家没提交的事务修改的数据,只能避免脏写问题;
RC隔离级别,可以读到人家提交的事务修改过的数据,可以避免脏写和脏读问题。
RR隔离级别,是不会读到别的已经提交事务修改的数据,可以避免脏读、脏写和不可重复读的问题;
串行是让事务都串行执行,可以避免所有问题
然后MySQL实现MVCC机制的时候,是基于undo log多版本链条+ReadView机制来做的,默认的RR隔离级别,就是基于这套机制来实现的,依托这套机制实现了RR级别,除了避免脏写、脏读、不可重复读还能避免幻读问题,因此一般来说我们都用默认的RR隔离级别就好了
这就是数据库的隔离机制以及底层的原理,希望大家好好理解,可以复习一下之前的内容,把这套机制理解清楚了,接下来我们就要开始讲解锁机制了。
锁机制,解决的就是多个事务同时更新一行数据,此时必须要有一个加锁的机制
锁机制也是非常复杂的,我们接下来会用比较多的篇幅来讲清楚MySQL一套完整的锁机制,然后讲完锁机制,就会来讲大量的实战案例了