MySql事务隔离级别和Spring传播机制

MySQL中事务的隔离级别与传播机制解析 作者:禅与计算机程序设计艺术 1.简介 在关系数据库中,事务(Transaction)是逻辑上的工作单位,用于完成数据库管理系统(DBMS)执行的一个功能。其包括一个或多个SQL语句或存储过程等操作序列,要么全部成功,要么全部失败。因此,事务具有4个属性:原子性、一致性、隔离性、持久性。而事务的隔离性, 阅读详情

目录

一、事务隔离级别

1.1、事务的四要素(ACID)

1.2、并发所带来的问题

1.3、事务隔离级别类型

1.4、场景复现

1.4.1、脏读

1.4.2、不可重复读

1.4.3、幻读

二、Spring事务的传播机制


 


一、事务隔离级别

1.1、事务的四要素(ACID)

原子性:事务的所有操作都是原子性,即要不当前操作全部做完。如果中间操作失败,则回到最初的状态。即要不全做完,要不全不做。

一致性:事务开始前和事务开始后,数据库的完整性约束没有被破坏。

隔离性:同一时间,只允许一个事务操作同一个数据源。

持久性:事务完成后,对数据库的所有操作都会持久化到数据库中,不能回滚。

1.2、并发所带来的问题

脏读:事务A读取了事务B更新的数据,然后事务B又进行回滚。此时事务A读取到了脏数据。

不可重复读:事务A多次读取同一数据源出现结果不一致。如:事务B在事务A读取数据源过程中,对数据源进行了更新,导致事务A读取到数据不一致。主要出现在修改场景。

幻读:事务A在更新数据时,事务B又新增了一条新的记录,事务A提交之后发现新增之后的数据没有更新,出现幻读。主要出现新增或者删除等场景。

数据准备:

#表结构
CREATE TABLE `Class_Info` (
  `Id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(11) DEFAULT NULL COMMENT '名称',
  `GradeId` int(11) DEFAULT NULL COMMENT '年级id',
  `HeadTeacher` varchar(11) DEFAULT NULL COMMENT '班主任',
  `AddTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

INSERT INTO `Class_Info` (`Id`, `Name`, `GradeId`, `HeadTeacher`, `AddTime`, `UpdateTime`)
VALUES
	(1, '李四', 1, '1', '2021-03-23 19:28:44', '2021-03-23 19:28:44');
INSERT INTO `Class_Info` (`Id`, `Name`, `GradeId`, `HeadTeacher`, `AddTime`, `UpdateTime`)
VALUES
	(2, '张三', 1, '1', '2021-03-23 19:28:44', '2021-03-23 19:28:44');

(1)#设置会话事务隔离级别为读未提交
SET session TRANSACTION ISOLATION LEVEL Read uncommitted;

(2)#设置事务为不自动提交
set autocommit=0;

1.3、事务隔离级别类型

读未提交(Read Uncommitted):事务B可以读取事务A为已修改但是未提交的数据。该级别会出现脏读、幻读、不可重复读等现象。

读提交(Read Committed):事务B只能读取事务A提交之后的数据。该场景可出现幻读和不可重复读。不可重复读场景:事务A在B提交之前读取数据,接着在事务B提交之后又读取了数据,发现两次数据不一致。

不可重复读(Repeatable Read):保证一个事务不能读取另一个事务未提交的数据。该级别可能出现幻读场景。

1.4、场景复现

1.4.1、脏读

(1)开启事务 A
start transaction;

(2)#修改数据但不提交
update Class_Info set name='王五'  where id=1;

(3)#查询语句,发现Name已经变成更新之后的值为 '王五'
select *  from Class_Info where id=1;

(4)#回滚修改命令
rollback

(5)#查询语句,发现Name值为更新之前的值 '李四'
select *  from Class_Info where id=1;

结果分析:(4)查询语句在还未回滚之前查询到了(1)还未提交的数据,读取到了脏数据。

1.4.2、不可重复读

(1)#开启事务 A
start transaction;

(2)#查询表中所有记录
select * from Class_Info;


(4)开启事务 B
start transaction;

(5)表添加记录
INSERT INTO `Class_Info` (`Id`, `Name`, `GradeId`, `HeadTeacher`, `AddTime`, `UpdateTime`)
VALUES
	(3, '李逵', 1, '1', '2021-03-23 19:28:44', '2021-03-23 19:28:44');

(6)提交B事务
commit;

(7)事务接着查询表中所有记录
select * from Class_Info;

(8)提交事务 A 
commit;

结果分析:同一个事务中(2)和(7)同一个查询,发现查询的结果不一样,(7)中结果多了一条数据。

1.4.3、幻读

(1)#开启事务 A
start transaction;

(2)#将表中所有名字改为 祁东
update Class_Info set name='祁东'

(4)开启事务 B
start transaction;

(5)事务B添加记录
INSERT INTO `Class_Info` (`Id`, `Name`, `GradeId`, `HeadTeacher`, `AddTime`, `UpdateTime`)
VALUES
	(3, '李逵', 1, '1', '2021-03-23 19:28:44', '2021-03-23 19:28:44');

(6)提交B事务
commit;

(7)事务接着查询表中所有记录
select * from Class_Info;

(8)提交事务 A 
commit;

结果分析:发现结果事务A中本来已经修改所有的名字为祁东,但是由于事务B中间又添加了一条数据,造成出现幻读现象。

 

二、Spring事务的传播机制

PROPAGATION_REQUIRED(默认值):支持当前事务,如果不存在则新建一个事务;如果当前存在事务,则将加入当前事务,合并成一个事务。由于两个操作都在同一个事务中,因此若第二事务出现回滚操作,则整个操作都会回滚。

REQUIRES_NEW:新建事务,如果当前事务存在,则把当前事务挂起;此事务独立提交,即使父级事务异常,子事务还能正常提交。

NESTED:如果当前存在事务,则他变成父事务的子事务,方法结束后不直接提交,而是等事务全部结束后才提交;如果当前没有事务,则新建一个事务;如果异常,父事务可以捕获异常但是不会滚,会正常提交;如果父事务异常,则一定回滚。

SUPPORTS:如果当前存在事务,则加入到当前事务;如果不存在事务则以非事务的方式运行。

NOT_SUPPORTED:以非事务的方式运行;如果当前存在事务,则会把事务挂起;

MANDATORY(强制):如果当前存在事务,则在当前事务中运行;如果当前不存在事务则抛出异常,即父级方法必须有事务。

NEVER:以非事务的方式运行,即当前父级方法必须有事务,如果没有事务则会抛出异常。

总结:方法A为父方法,方法A中执行方法B

正常/异常PROPAGATION_REQUIREDREQUIRES_NEWNESTEDSUPPORTSNOT_SUPPORTEDMANDATORYNEVER
A正常、B正常A提交、B提交A提交、B提交A提交、B提交A提交、B提交A提交、B提交A提交、B提交A提交、B提交
A异常、B正常A回滚、B回滚A回滚、B提交A回滚、B回滚A回滚、B回滚A回滚、B提交A回滚、B回滚A提交、B提交
A异常、B异常A回滚、B回滚A回滚、B回滚A回滚、B回滚A回滚、B回滚A回滚、B提交A回滚、B回滚A提交、B提交
A正常、B异常A回滚、B回滚A提交、B回滚

A提交(捕获异常)、B回滚

A回滚(不捕获异常)、B回滚

A回滚、B回滚A提交、B提交A回滚、B回滚A提交、B提交
spring事物的7大传播机制,5个隔离机制 上文理解到对spring事物,事物的隔离机制,这片具体说下事物的传播机制和隔离机制 立即下载

相关推荐

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

mysql事务传播方式

mysql-spring 几种事务的传播方式

yang_zzu的博客 2314

SolidWorks有限元分析流程

对于很多专业,在进行设计完成后,为了缩短开发周期,往往需要配合仿真结果进行,机械行业更是如此。平时大家多采用专业有限元仿真软件进行仿真分析,如ANSYS;不过SolidWorks软件因为制图简单,同时存在专用的有限元仿真模块Simulation,对于初学者往往更加适用,下面简单介绍下SolidWorks Simulation仿真流程。 1. 分析流程 关键步骤如下: **(1)创建算例;**对模型的每次分析都是一个算例,一个模型可以包含多个算例。 **(2)应用材料;**指定模型的材料属性,如铝合金、钢材等

DYH_BK的博客 3万+

事务的传播机制

事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常 PROPAGATION_R...

小十木的博客 392

unity shader 后处理实现水墨风格渲染「Low Poly 」变「水墨画 」

水墨风格渲染 这次学校的比赛打算做一个中国古代背景的游戏,所以尝试做了水墨风格的渲染。 主要按以下四步来实现的效果: 根据色调和饱和度调整饱和度。 对图像进行模糊 水墨风格的物体边缘 物体内画笔笔触的模拟 接下来我分别就这四步依次展开说明: 调整饱和度 这里我使用Post-Processing Stack 的Color Grading 来调节饱和度,通过使用Grading Curv...

九级铁甲蛹的博客 1万+

《AgentScope-Java 深入浅出教程》第3章 消息系统(Message)

在 AgentScope 中,消息(Msg)是最核心的数据结构。│ 消息的作用 ││ ││ │ 用户输入 │ ────────────┐ ││ ▼ ││ │智能体通信│ ◄────► │ 消息对象 │ ◄────► │ LLM API │ ││ ▲ ││ │ ││ │ 历史存储 │ ────────────┘ ││ │用户输入:封装用户的问题和指令智能体输出:封装智能体的回复和工具调用智能体通信:在多智能体系统中传递信息LLM API 交互:转换为 LLM 可理解的格式历史存储。

步子哥的博客 228

MySQL 事务的隔离级别和传播机制

开启一个嵌套的事务,它是已存在事务的子事务。嵌套事务开始执行时,它将取得一个保存点,如果这个嵌套事务执行失败,将会回滚到此保存点,嵌套事务是外部事务的一部分,只有外部事务结束后,它才会被提交。如果被调用的业务方法,存在于事务中,则原事务挂起,新事务被创建,直到新事务执行结束,原事务才会恢复执行。如果业务方法在事务环境下被调用,该事务会被挂起,直到业务方法执行完成,原先的事务才会恢复执行。在并发事务中,保证一个事务修改的数据提交后,才会被另一个事务读取到。在非事务环境下被调用,就以非事务的方式运行。

qq_44726330的博客 611

2026.2.23:AgentScope框架实战<一>:安装并使用agentscope

本文介绍了AgentScope框架的安装与使用实践。通过PyPI安装agentscope[full]后,演示了如何创建ReActAgent代理:1)配置DashScope聊天模型;2)注册自定义工具函数(查询位置和天气);3)初始化代理并处理用户请求。示例展示了代理如何响应复合查询(如同时获取北京位置和天气信息),输出结果显示代理成功执行了工具调用并返回结构化响应。该框架支持Python 3.13环境,提供内存管理、工具集成等功能,适用于构建智能代理系统。

拥抱具身智能,昇腾Ascend C 507

MySQL 事务全面解析

事务是数据库系统中保证数据一致性的核心机制,MySQL 的事务功能主要围绕 InnoDB 存储引擎实现。以下从基础概念到高级特性全面解析 MySQL 事务。

jakeswang的博客 1255

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3054

Spring事务传播机制和Mysql事务隔离级别关系

spring 事务类型 1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘ 3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在...

沉下心来,戒骄戒躁 889

k3s cpu load 和 cpu 使用率很高处理

在这期间还执行过缩减 sqlite3 数据库操作,不知道是哪个操作起了作用,亦或者两个操作有影响,删除 ns 促进了数据库缩减的执行(没删除之前数据库缩减不成功,db文件大小未减小,但不确定是不是执行完 VACUUM 之后需要时间 db 文件才会减小,或者是因为删除了 ns 才导致其减小),再或者是两个操作都起了作用。kubectl get ns 发现有很多卡在删除状态的 ns。k3s 官网关于这个问题的谈论。执行如下脚本删除掉这些 ns。有人详细说过这个问题。

weixin_40548182的博客 683

Java复习事务相关 mysql事务隔离级别 spring事务的传播机制 2025年11月9日

本文系统介绍了MySQL事务隔离级别和Spring事务传播机制。MySQL提供四种隔离级别:读未提交、读已提交(解决脏读)、可重复读(解决不可重复读,InnoDB默认)、可串行化(解决幻读)。Spring事务传播机制定义了多个事务方法相互调用时的处理方式,重点讲解了REQUIRED(默认)和REQUIRES_NEW机制,并通过电商下单和用户注册案例说明如何根据业务需求选择合适的事务传播策略。选择时应考虑业务方法间的依赖关系,判断是否需要事务合并、独立或嵌套执行。

多多的博客 984

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【转】Spring MySQL 事务隔离级别,传播机制,savepoint

MySQL的四种事务隔离级别 https://www.cnblogs.com/huanongying/p/7021555.html spring事物的七种事物传播属性行为及五种隔离级别 https://www.cnblogs.com/yuanfy008/p/4174340.html PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别 ...

weixin_30636089的博客 217

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL 之 事务【事务是什么?解决了什么问题?通过什么实现的?ACID分别是什么意思?MYSQL隔离级别?Spring事务传播机制?什么情况下Spring事务会失效?如何避免?如何处理大型事务?】

事务是什么?解决了什么问题?通过什么实现的?ACID分别是什么意思?MYSQL隔离级别?Spring事务传播机制?什么情况下Spring事务会失效?如何避免?如何处理大型事务?

人生快意事,读的好书,觅得良友 494

MySQL Spring 事务全家桶:事务本质、隔离级别、传播机制与失效场景全解析

本文系统讲解Java后端面试中的事务考点,涵盖MySQL事务ACID特性与实现机制、四种隔离级别及三类并发问题、Spring事务模型与@Transactional执行流程、八种传播行为解析,以及常见事务失效场景分析。文章从底层数据库原理到上层框架实现,提供完整知识链路,帮助开发者构建体系化的事务认知,并给出可直接用于面试的结构化回答模板。

写代码写久了才发现:人生和程序一样,经常 Bug 多、需求乱,重构难,但总能跑起来。这个博客记录我从迷茫到搞懂、从踩坑到归纳、从混乱到清晰的过程。写给过去迷茫的自己,也写给同样在路上折腾的你。没有炫技,没有玄学,只有真实的思考、实践和成长。 465

Mysql事务的四大特性、四种隔离级别与Spring事务传播机制

什么是事务: 可以把事务看成一个最小的执行单元,事务内的语句,要么全部执行成功,要么全部回滚不执行。 通俗来讲,就是被事务注解标注的代码块,要么全部执行成功,如果其中一处出现异常,则前面所有执行成功的操作全部回滚不执行。 事务的四大特性(ACID): 原子性(atomicity):事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行。 一致性(consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。 隔离性(isolation):同一时间,只允许一个事务请求同一组数

我还可以 551

Spring事务和事务传播机制(2)

❤️❤️❤️Spring + Spring MVC + MyBatis_冷兮雪的博客-优快云博客在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。Spring事务和事务传播机制(1)_热爱编程的林兮的博客-优快云博客2、Spring 中设置事务隔离级别。

冷兮雪的博客 3089

mysql的事物传播机制_图解Spring事务管理及Mysql事务隔离级别传播行为

一、事务的特性Atomicity原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。Consistency一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。Isolation隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。Durability持久性:已被提交的事务对数据库的修改应该...

weixin_39922004的博客 350

mysql的传播机制_spring事务传播机制与数据库事务隔离级别

事务传播行为类型说明PROPAGATION_REQUIRED [ˌprɔpəˈgeɪʃən]传输[rɪˈkwaɪəd]必须如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。PROPAGATION_SUPPORTS[səˈpɔ:t]支持支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY[ˈmændəˌtɔ:ri:, -ˌtəʊri...

weixin_39530838的博客 254

mysql事务传播级别_Spring事务传播机制和数据库隔离级别

先看下Spring的事务传播行为类型事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。PROPAGATION_REQ...

weixin_35902168的博客 187

【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用

本期讲解了关于MySQL事务的隔离级别回顾,以及spring的事务隔离级别以及事务传播机制,分别从概念和代码进行了演示~~~

GGBond778的博客 2641

【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制

本文重点讲解@Transactional的各个参数作用,尤其是其中的事务隔离级别isolation和事务传播机制propagation!

Carefree_State的博客 5625
上一篇: 两阶段提交、三阶段提交和TCC
普通网友
博客等级 码龄12年 12粉丝 22原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值