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):一个事务在读取某个数据后,再次读取该数据时,发现数据已经被其他事务修改或删除。

相关推荐
小蒜学长4 小时前
基于springboot 校园餐厅预约点餐微信小程序的设计与实现(代码+数据库+LW)
数据库·spring boot·微信小程序
kimble_xia@oracle4 小时前
Oracle打补丁笔记
数据库·oracle
清风徐来QCQ4 小时前
阿里云centos7-mysql的使用
mysql·阿里云·云计算
鼠鼠我捏,要死了捏4 小时前
大规模系统中的分库分表原理深度解析与性能优化实践指南
数据库·性能优化·分库分表
Rhys..4 小时前
Python&Flask 使用 DBUtils 创建通用连接池
开发语言·python·mysql
舒一笑5 小时前
为什么where=Version就是乐观锁了?
后端·mysql·程序员
Linux运维技术栈5 小时前
【实战+原理】微软云 Azure Database 私有网络接入模式全解析:从子网委派到Private Endpoint
数据库·microsoft·azure
小熊h5 小时前
MySQL集群高可用架构——组复制 (MGR)
linux·数据库·mysql
sunshine-sm6 小时前
CentOS Steam 9安装 MySQL 8
linux·运维·服务器·数据库·mysql·centos·centos stream