事务隔离级别有哪些?

简介: 讲述事务隔离级别

参考资料

  1. 《高性能 MySQL 第三版》第 1 章 MySQL 架构与历史 Page 8.
  2. Spring 事务 -- @Transactional的使用 - 简书 (jianshu.com)

READ UNCOMMITTED 未提交读

事务可以读取其他事务未提交的数据,这也被称为 脏读。比如,事务 A 读取了事务 B 更新后的数据,然后 B 回滚操作,那么 A 读取到的数据是脏数据。

READ COMMITED 提交读

是大多数数据库系统的默认隔离级别。一个事务从开始直到提交之前,所做的任何修改对其他事务都不可见,这个隔离级别有时候也叫 不可重复读,因为在事务执行两次查询的过程中,可能因为数据被其他事务修改,导致读取到两个不一样的结果。

REPEATABLE READ 可重复读

是 MySQL 的默认事务隔离级别。该级别解决了脏读和不可重复读的问题,但是理论上还是无法解决另外一个幻读的问题。幻读 指的是事务 A 在读取某个范围内的记录时,事务 B 又在该范围插入了一条新的记录,当事务 A 再次读取该范围的记录时,会产生幻行。

在该事务隔离级别下,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是 Next-Key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙事务加了锁,其他事务是不能子啊这个间隙插入记录的,这样可以防止幻读。

SERIALABLE 可串行化

是最高的隔离级别。该隔离级别强制事务串行执行,它会在读取的每一行数据上加锁,这样做可能会导致大量的超时和锁争用的问题。除非在非常需要确保数据一致性而且可以接受没有并发的情况下,才考虑采用该级别。

隔离级别越高,越能保证数据完整性和一致性,但是对并发性能的影响也就越大。


💡 不可重复读和幻读的区别

  1. 不可重复读侧重于修改,幻读侧重于新增或删除。
  2. 解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表。
相关文章
|
前端开发 Java 应用服务中间件
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
2570 0
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
|
4月前
|
安全 Linux API
Fmt库在CentOS 7的应用指南
Fmt库为C++提供了一个安全、高效的字符串格式化机制,尤其是对比传统的C风格字符串操作函数,Fmt库大幅提高了开发效率,减少了运行时错误。它的现代C++设计使得代码既简洁又表意清晰,大大降低了代码的维护难度。
237 11
|
IDE Linux 开发工具
[ROS基础] --- 创建工作空间
[ROS基础] --- 创建工作空间
567 0
|
8月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
微服务引擎 MSE 及云原生 API 网关 2025 年 2 月产品动态
|
SQL 存储 Java
第三章 SQL错误信息
第三章 SQL错误信息
258 1
|
算法 Java Linux
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
这篇文章介绍了如何使用Java的Graphics2D类在图片上合成另一个照片,并将照片切割成圆形头像的方法。
216 1
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
1643 0
|
Linux 虚拟化
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
3276 0
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
|
机器学习/深度学习 人工智能 监控
AI工程化—— 如何让AI在企业多快好省的落地?
AI工程化—— 如何让AI在企业多快好省的落地?
|
SQL NoSQL 小程序
手把手教你利用开源项目搭建一个属于自已的电商平台
手把手教你利用开源项目搭建一个属于自已的电商平台
784 0
手把手教你利用开源项目搭建一个属于自已的电商平台