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

相关推荐
一 乐2 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
鹏码纵横2 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
美林数据Tempodata3 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
野槐3 小时前
node.js连接mysql写接口(一)
数据库·mysql
Zzzone6834 小时前
PostgreSQL日常维护
数据库·postgresql
chxii4 小时前
1.13使用 Node.js 操作 SQLite
数据库·sqlite·node.js
冰刀画的圈4 小时前
修改Oracle编码
数据库·oracle
这个胖子不太裤4 小时前
Django(自用)
数据库·django·sqlite
麻辣清汤4 小时前
MySQL 索引类型及其必要性与优点
数据库·mysql
2501_915374355 小时前
Neo4j 图数据库安装教程(2024最新版)—— Windows / Linux / macOS 全平台指南
数据库·windows·neo4j