2026-05-25 08:19:10
这个过程实际上会涉及到 脏写、脏读、不可重复读、幻读 ,四种问题。
MySQL默认的事务隔离级别是RR(可重复读),而且 MySQL的RR级别是可以避免幻读发生 。也就是说,MySQL里执行的事务,默认情况下不会发生脏写、脏读、不可重复读和幻读的问题。
如何修改MySQL隔离级别?
Spring中默认隔离级别与MySQL一致,Spring中如何修改?
简单来说,就是执行一个事务的时候,就生成一个ReadView,里面比较关键的东西有4个:
示例:
通过undo log多版本链条,加上你开启事务时候生产的一个ReadView,然后再有一个查询的时候,根据ReadView进行判断的机制,你就知道你应该读取哪个版本的数据。
首先我们先要明白,多个事务并发运行的时候,同时读写一个数据,可能会出现脏写、脏读、不可重复读、幻读几个问题。
针对这些问题,所以才有RU、RC、RR和串行四个隔离级别。
然后MySQL实现MVCC机制的时候,是 基于undo log多版本链条+ReadView机制 来做的,默认的RR隔离级别,就是基于这套机制来实现的,依托这套机制实现了RR级别,除了避免脏写、脏读、不可重复读,还能避免幻读问题。因此一般来说我们都用默认的RR隔离级别就好了。