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