面试突击84:Spring 有几种事务隔离级别?

Spring 中的事务隔离级别和数据库中的事务隔离级别稍有不同,以 MySQL 为例,MySQL 的 InnoDB 引擎中的事务隔离级别有 4 种,而 Spring 中却包含了 5 种事务隔离级别。

1.什么是事务隔离级别?

事务隔离级别是对事务 4 大特性中隔离性的具体体现,使用事务隔离级别可以控制并发事务在同时执行时的某种行为。
比如,有两个事务同时操作同一张表,此时有一个事务修改了这张表的数据,但尚未提交事务,那么在另一个事务中,要不要(或者说能不能)看到其他事务尚未提交的数据呢?
这个问题的答案就要看事务的隔离级别了,不同的事务隔离级别,对应的行为模式也是不一样的(有些隔离级别可以看到其他事务尚未提交的数据,有些事务隔离级别看不到其他事务尚未提交的数据),这就是事务隔离级别的作用。

2.Spring 事务隔离级别

Sping 中的事务隔离级别有 5 种,它们分别是:

  1. DEFAULT: Spring 中默认的事务隔离级别,以连接的数据库的事务隔离级别为准;
  2. READ_UNCOMMITTED:读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读;
  3. READ_COMMITTED:读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读;
  4. REPEATABLE_READ:可重复读,它能确保同一事务多次查询的结果一致。但也会有新的问题,比如此级别的事务正在执行时,另一个事务成功的插入了某条数据,但因为它每次查询的结果都是一样的,所以会导致查询不到这条数据,自己重复插入时又失败(因为唯一约束的原因)。明明在事务中查询不到这条信息,但自己就是插入不进去,这就叫幻读 (Phantom Read);
  5. SERIALIZABLE:串行化,最高的事务隔离级别,它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题,但因为执行效率低,所以真正使用的场景并不多。

所以, 相比于 MySQL 的事务隔离级别,Spring 中多了一种 DEFAULT 的事务隔离级别
事务隔离级别与问题的对应关系如下:

面试突击84:Spring 有几种事务隔离级别?
  • 脏读:一个事务读取到了另一个事务修改的数据之后,后一个事务又进行了回滚操作,从而导致第一个事务读取的数据是错误的。
  • 不可重复读:一个事务两次查询得到的结果不同,因为在两次查询中间,有另一个事务把数据修改了。
  • 幻读:一个事务两次查询中得到的结果集不同,因为在两次查询中另一个事务有新增了一部分数据。

3.设置事务隔离级别

在 Spring 中,事务的隔离级别有 2 种设置方法,一种是在编程式事务中,可以通过以下代码来设置事务隔离级别:

面试突击84:Spring 有几种事务隔离级别?
另一种是在声明式事务中设置事务隔离级别,设置方法如下:
面试突击84:Spring 有几种事务隔离级别?

总结

Spring 中的事务隔离级别比 MySQL 中的事务隔离级别多了一种,它包含的 5 种隔离级别分别是:

  1. Isolation.DEFAULT:默认的事务隔离级别,以连接的数据库的事务隔离级别为准。
  2. Isolation.READ_UNCOMMITTED:读未提交,可以读取到未提交的事务,存在脏读。
  3. Isolation.READ_COMMITTED:读已提交,只能读取到已经提交的事务,解决了脏读,存在不可重复读。
  4. Isolation.REPEATABLE_READ:可重复读,解决了不可重复读,但存在幻读(MySQL 数据库默认的事务隔离级别)。
  5. Isolation.SERIALIZABLE:串行化,可以解决所有并发问题,但性能太低。

需要注意是 Spring 是事务隔离级别是建立在连接的数据库支持事务的基础上的,如果 Spring 项目连接的数据库不支持事务(或事务隔离级别),那么即使在 Spring 中设置了事务隔离级别,也是无效的设置。

是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java面试真题解析
面试合集:https://gitee.com/mydb/interview

Original: https://www.cnblogs.com/vipstone/p/16705750.html
Author: Java中文社群
Title: 面试突击84:Spring 有几种事务隔离级别?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/802421/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 『Python 自学笔记』重新认识文件、数据库操作

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年8月5日
    081
  • 爬虫日记(74):Scrapy项目配置参数源码分析(二)

    接着下来是下面这语句: init_env(project) 这是调用init_env函数,这个函数主要用来读取所有的scrapy.cfg,然后把这个配置文件里的settings字段…

    Python 2023年10月6日
    038
  • java dataframe agg_DataFrame 的函数

    Action 操作 collect() ,返回值是一个数组,返回dataframe集合所有的行 collectAsList() 返回值是一个java类型的数组,返回datafram…

    Python 2023年8月8日
    043
  • pandas读写文件

    Pandas读取的数据为DataFrame类型,而DataFrame可以写入到各种格式的文件中,其中包括json、html、文本文件、数据库、Excel文件等等。(注:DataFr…

    Python 2023年8月8日
    056
  • Python数据分析(二) —— 进阶绘制双折线图

    单折线图往往不能对两个或者多个事件在同一段时间的比较情况,那么就需要在一张折线图上绘制多条折线。其基本思路就是设置多个y值对应一个x值,就能反映出在同一段时间的不同事件的变化趋势和…

    Python 2023年8月31日
    043
  • 将ChatGPT接入微信实现智能回复

    ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码、改论文、讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在…

    Python 2023年10月29日
    050
  • pytest篇1-介绍与环境安装

    前言 1、官方文档:https://docs.pytest.org/en/latest/contents.html 2、我们在前面介绍了unittest框架,都知道unittest…

    Python 2023年9月14日
    041
  • python数据分析三剑客

    本文主要对Numpy,Pandas和Matplotlib常用方法进行了粗略的整理。。。 图像处理方式 显示中文(因为横纵坐标想要显示中文的) plt.rcParams[‘font….

    Python 2023年8月29日
    064
  • python使用scrapy_Python爬虫–Scrapy使用

    Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。…

    Python 2023年10月5日
    037
  • python绘图——坐标轴

    1. 2D坐标轴 1.1 绘制简单的曲线 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-1,1…

    Python 2023年9月2日
    077
  • 初识django下

    django-admin startproject + 项目名python manage.py runserver 运行项目python manage.py startapp 子应…

    Python 2023年8月4日
    048
  • [截屏]Python截屏深度解析

    先说,没用pyqt(没用过)和pywin32尽量支持全平台(win,linux,mac) 应该大部分人用过或知道 from PIL import ImageGrab,Image d…

    Python 2023年9月21日
    042
  • 【Flask + Eacharts】使用Flask + ECharts对考研数据进行可视化

    其他的可视化试题,药品数据的可视化 对考研数据进行可视化 数据的分析和查看 * 数据的查看 数据的分析 对考研数据进行数据可视化 * 招生专业数量前十条形图 部分专业的最高分和最低…

    Python 2023年8月9日
    060
  • 万能四码(0126版本)之分析

    万能四码(0126版本)之分析一、万能四码的重新排列原版是这样的:0126,0134,0159,0178,0239,0247,0258,0357,0368,0456,0489,06…

    Python 2023年11月8日
    074
  • linux服务器问题:-bash: conda: command not found

    先查看“home/”或者”root/”下面是否有anaconda3文件夹,若有,先找到anaconda所在路径,然后直接看第4条的②…

    Python 2023年9月8日
    092
  • Pandas DataFrame 的可视化工具大全

    简介 Excel的好处之一是它提供了一个直观和强大的图形界面来查看你的数据。相比之下,pandas + Jupyter notebook 提供了大量的编程能力,但在图形化显示和操作…

    Python 2023年8月8日
    051
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球