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

相关推荐
N***73856 分钟前
SQL锁机制
java·数据库·sql
小羊在奋斗15 分钟前
MySQL表的约束:从基础到核心(附场景+案例)
android·数据库·mysql
东南门吹雪16 分钟前
PostgreSQL与MySQL的锁与隔离级别
mysql·postgresql·区块链
Wang's Blog18 分钟前
MongoDB小课堂: 文档查询之匹配查询与比较操作符深度解析
数据库·mongodb
cookqq26 分钟前
mongodb根据索引IXSCAN 查询记录流程
数据结构·数据库·sql·mongodb·nosql
p***323539 分钟前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
e***193539 分钟前
MySQL-mysql zip安装包配置教程
android·mysql·adb
h***34631 小时前
Redis安装教程(Windows版本)
数据库·windows·redis
q***65691 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch
蓝色记忆1 小时前
执行计划FirstMatch
mysql