(1)简述:
简单梳理一下MySQL中的多事务并发运行的隔离原理,其实这套原理说白了就是MVCC机制,也就是 muti-version concurrent control,就是多版本并发控制机制,专门控制多个事务并发运行的时候
,互相之间会如何影响。
回顾1:
首先多个事务并发运行的时候,同时读写一个数据,可能会出现脏写,脏读,不可重复读,幻读这几个问题:
脏写:两个事务更新一个数据,结果有一个事务回滚了把另一个事务更新的数据也回滚了
脏读:一个事务读到了另一个事务还没提交的时候修改的数据,结果另一个事务回滚了,下次就读不到了。
不可重复读:多次读同一条数据,别的事务老是修改数据值还提交了,多次读到的值不同
幻读:就是范围查询,每次查到的数据不同,有时候别的事务插入了新的值,就会读到更多的数据
回顾2:
针对这些问题,有了RU,RC,RR和串行四个隔离级别:
RU:可以读到别的事务还没提交的事务修改的数据,只能避免脏写
RC:可以读到别的提交事务的修改过的数据,可以避免脏写和脏读问题
RR:不会读到别的已经提交事务修改过的数据,可以避免脏写,脏读和不可重复读问题
串行:让事务都串行执行,避免所有问题
回顾3:
MySQL实现MVCC机制的时候,是基于undo log多版本链条 + ReadView机制来做的,默认的RR隔离级别,就是基于这套机制来实现的,依托这套机制实现了RR级别,除了避免脏写,脏读,不可重复
读,还能避免幻读问题,因此一般来说我们都用默认的RR隔离级别就好了。
锁机制:
解决的就是多个事务同时更新一行数据,此时必须要有一个加锁的机制,锁机制也是非常复杂的。