MySQL的四个隔离级别对比

MySQL的四个隔离级别对比

前置说明

最近在看MySQL的常见面试题, 简单记录一下.

四种隔离级别对比

主要为了保证ACID中的隔离性, 一致性是目的. 原子性, 隔离性, 持久性都是手段.

隔离级别 脏读(Dirty Read) 幻读(Phantom Read) 不可重复读(Non-repeatable Read)
Read Uncommitted 可能发生 可能发生 可能发生
Read Committed 不会发生 可能发生 可能发生
Repeatable Read 不会发生 可能发生 不会发生
Serializable 不会发生 不会发生 不会发生

注:可能发生 表示在该隔离级别下可能出现该问题。不会发生表示在该隔离级别下不会出现该问题。

需要注意的是,不同的隔离级别会在并发性能和数据一致性之间做出不同的权衡。随着隔离级别的提高,数据库的并发性能通常会降低,但数据的一致性会得到更好的保证。选择合适的隔离级别需要根据应用的需求来进行权衡。

读未提交(READ UNCOMMITTED)级别,事务中的读取操作可以看到未提交事务的修改。因此,脏读可能发生。同时,由于其他事务的修改也可能影响数据,幻读和不可重复读都可能发生。

读已提交(READ COMMITTED)级别,事务中的读取操作只能看到已提交事务的修改。因此,脏读不可能发生。但是,幻读和不可重复读仍然可能发生。

可重复读(REPEATABLE READ)级别,MySQL默认的隔离级别. 事务中的读取操作在同一个事务中多次读取同一行数据时,结果始终一致,除非事务本身发生了修改。因此,不可重复读不可能发生。但是,幻读仍然可能发生。

可串行化(SERIALIZABLE)级别,事务串行化顺序保证了对事务的隔离性。因此,脏读、幻读和不可重复读都不可能发生。但是,该级别的性能开销较大,因为事务通常需要等待前一个事务完成,才能继续执行。

三种问题

  • 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。这可能导致读取到无效或不一致的数据。

  • 幻读(Phantom Read):一个事务在读取某个范围的数据时,另一个事务在该范围内插入了新的数据,导致第一个事务重新读取该范围的数据时,发现有新的数据出现。

  • 不可重复读(Non-repeatable Read):一个事务在读取某个数据后,再次读取该数据时,发现数据已经被其他事务修改或删除。

相关推荐
SelectDB3 小时前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶4 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵7 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils7 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
SamDeepThinking11 小时前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
Databend1 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
李白客2 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将2 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils3 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库