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

相关推荐
凉栀お_19 分钟前
MySQL第四次作业(索引、视图)
数据库·mysql
睡前要喝豆奶粉25 分钟前
.NET Core Web API中数据库相关配置
数据库·c#·.netcore
大G的笔记本38 分钟前
高频 Redis 面试题答案解析
数据库·redis·缓存
万事大吉CC1 小时前
SQL语法基础教程
数据库·oracle
betazhou2 小时前
Oracle dgbroker常规命令管理简介
数据库·oracle·adg·dbbroker
海边夕阳20062 小时前
PostgreSQL性能调优:解决表膨胀、索引碎片和无效索引问题
数据库·经验分享·postgresql·性能优化
IT教程资源C2 小时前
(N_083)基于springboot毕业设计管理系统
mysql·springboot毕业管理
一 乐3 小时前
个人理财系统|基于java+小程序+APP的个人理财系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·后端·小程序
m0_748248023 小时前
Redis的数据淘汰策略解读
数据库·redis·缓存
哥哥还在IT中3 小时前
让数据库更智能-大模型如何优化我们的SQL查询
数据库·sql