November 20, 2024

MySQL事务隔离级别

事务特性

事务具有ACID四大特性,具体为:

InnoDB如何保证ACID特性?

并行事务可能会造成的问题

MySQL在同时处理多个事务的时候可能会出现脏读、不可重复读、幻读

事务隔离级别

以上的三种现象按严重程度排名:脏读 > 不可重复读 > 幻读

SQL标准提出了四种隔离级别防止出现这些现象,隔离级别越高,性能越低

不可重复读的隔离级别已经能够避免大部分的幻读现象,主要依靠两种解决方案:

为了避免在特殊情况下发生幻读,需要在事务开启后尽快执行select…from update,这样能生成next-key lock避免其他事务插入数据。

四种隔离级别的实现方式:
MySQL两种开启事务的方式

Read View在MVCC内的工作方式

Read View包括四个字段:

聚簇索引中还有两个隐藏列:

ReadView.drawio

一个事务总是能访问自己的更新记录,除此以外对于其他事务和本事务生成的Read View而言:

这种通过版本链控制并发事务访问同一条记录的行为就是MVCC

About this Post

This post is written by ByronGu, licensed under CC BY-NC 4.0.

#MySQL#数据库#八股文