MySQL:事务隔离级别、事务传播行为(简单明了版本)

事务隔离级别,SpringBoot事务传播行为、事务实现的两种方式 SpringBoot设置事务隔离级别 读未提交 读已提交 可重复读 串行化 解决幻读的两种方式 中设置隔离级别 事务隔离与传播行为的区别 Spring七种传播行为 Propagation.REQUIRED Propagation.SUPPORTS Propagation.MANDATORY Propagation.REQUIRES_NEW Propagation.NOT_SUPPORTED SpringBoot事务实现的两种方式:注解和XML实现事务 阅读详情

MySQL事务隔离级别

  1. 读未提交(Read Uncommitted)

    • 问题存在:脏读、不可重复读、幻读。
    • 描述:事务可以读取其他事务未提交的修改。可能导致数据不一致。
  2. 读已提交(Read Committed)

    • 解决:脏读。
    • 问题存在:不可重复读、幻读。
    • 描述:事务只能读取已提交的数据,但同一事务多次读取同一数据可能结果不同。
  3. 可重复读(Repeatable Read)

    • 解决:脏读、不可重复读。
    • MySQL对幻读的处理:通过MVCC(多版本并发控制)和间隙锁(Gap Locks)避免幻读。
    • 描述:确保同一事务中多次读取同一数据的结果一致(MySQL默认隔离级别)。
  4. 串行化(Serializable)

    • 解决:所有并发问题(脏读、不可重复读、幻读)。
    • 代价:通过完全锁定相关数据实现,性能最低。

事务并发问题总结

隔离级别脏读不可重复读幻读
读未提交❌❌❌
读已提交✅❌❌
可重复读(MySQL)✅✅✅*
串行化✅✅✅

*MySQL通过MVCC和间隙锁在可重复读级别避免幻读,但其他数据库可能不同。


事务传播行为(Spring框架)

事务传播行为定义了事务在嵌套方法调用中的边界规则:

  1. REQUIRED

    • 如果当前存在事务,则加入该事务;否则新建一个事务。
    • 场景:默认选择,适用于大多数业务逻辑。
  2. REQUIRES_NEW

    • 无论当前是否存在事务,都新建事务,并挂起当前事务(若存在)。
    • 场景:需要独立事务的操作(如日志记录,避免主事务回滚影响日志)。
  3. SUPPORTS

    • 如果当前存在事务,则加入;否则以非事务方式执行。
    • 场景:查询操作,支持事务但不需要强制。
  4. NOT_SUPPORTED

    • 以非事务方式执行,挂起当前事务(若存在)。
    • 场景:不涉及数据修改的操作,或需要绕过事务管理。
  5. MANDATORY

    • 必须存在事务,否则抛出异常。
    • 场景:强制要求方法在事务中调用(如核心业务方法)。
  6. NEVER

    • 必须在非事务环境下执行,否则抛出异常。
    • 场景:确保方法不被事务包裹(如性能敏感的非数据库操作)。
  7. NESTED

    • 如果当前存在事务,则嵌套一个子事务(通过保存点实现);否则同REQUIRED。
    • 场景:部分操作需要独立回滚(如订单创建成功后记录日志,日志失败不影响订单)。

总结

  • 隔离级别:权衡数据一致性与性能,从低到高逐步解决脏读、不可重复读、幻读。
  • 传播行为:控制事务边界,解决多方法调用时事务如何协同(提交/回滚)。
  • 实际应用:MySQL默认的可重复读已满足多数场景,结合传播行为(如REQUIRED和REQUIRES_NEW)可灵活管理复杂业务逻辑。
MySQL中事务的隔离级别与传播机制解析 作者:禅与计算机程序设计艺术 1.简介 在关系数据库中,事务(Transaction)是逻辑上的工作单位,用于完成数据库管理系统(DBMS)执行的一个功能。其包括一个或多个SQL语句或存储过程等操作序列,要么全部成功,要么全部失败。因此,事务具有4个属性:原子性、一致性、隔离性、持久性。而事务的隔离性, 阅读详情

相关推荐

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

mysql事务传播方式

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

yang_zzu的博客 2314

FineBI制作数据可视化大屏-数据连接(1)

快速上手大屏可视化,FineBI数据连接配置。

Pangaoyang_的博客 1913

一文彻底掌握MySQL事务(四大特性,四种隔离级别,七种传播行为)

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 事务四大特性 原子性(Atomicity) 原子性指整个事务是不可分割的工作单位。在事务中所有数据库操作都执行成功,才算整个事务成功。事务中任何一个sql语句执行失败,已经执行成功的sql语句也必须被撤销,数据库状态回到执行事务前的状态。 一致性(Consistency) 事务在执行之前和执行之后都必须处于一致性状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。 例如转账操作,A有200元,B有100元,A转账100元给B,在转账

卧龙小蛋的博客 1682

su03t语音模块烧录识别不出问题解决方法

su03t语音sdk烧录无法识别问题

weixin_49387645的博客 6390

XPe开发初体验(一)XPe概述

XP Embedded是微软Windows Embedded产品线中非常重要的一环,不过比起大名鼎鼎的Windows Embedded CE,XPe显得过于低调了。在接下来的一段时间里,我希望能够用六篇的篇幅来描述一下XPe的整个开发过程。这个系列文章主要是针对有Windows编程经验,但是没有嵌入式开发经验的开发者,提供一些概念和开发过程的初步介绍。XP Embedded是一个基于Windo

aawolf = new Mobile.MVP 1万+

脏读、不可重复读、幻读

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。 2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务

chengwai26的博客 451

DenseNet训练实践

在Cifar10上训练DenseNet,复现DenseNet论文的结果是后面两篇分析工作的基础,因此本系列的第一篇,将首先讨论深度学习的训练过程中的几个方面: 1. 数据集 1.1 Cifar10数据集 Cifar10数据集有6万张32X32的图片,是一个小型的数据集,但数据的复杂度足够,下图来自DenseNet论文,可以看出,不用数据增强的话,ResNet的正确率也很难超过90%,因而足以用来验...

一蓑烟雨任平生 1万+

mysql事务的传播行为

子方法异常回滚时,父方法若try-catch,则父方法不会回滚。子方法异常时,父方法try-catch后,父方法可以正常提交不会回滚,仅子方法回滚。如果子方法异常,即便父方法try-catch处理,父方法依旧会在提交时抛出异常回滚。如果子方法异常,即便父方法try-catch处理,父方法依旧会在提交时抛出异常回滚。如果子方法异常,即便父方法try-catch处理,父方法依旧会在提交时抛出异常回滚。子方法新建事务:父子方法事务单独提交,父方法回滚不影响子方法事务。不使用事务,如果父方法存在事务,则抛出异常。

fy_6611的博客 439

【信息系统项目管理师】高分论文:论信息系统项目的整合管理(绩效考核系统)

我们将项目管理计划中的子计划包括项目范围、进度、成本、质量管理计划,过程改进计划,人力资源管理计划,风险、采购管理计划,干系人管理计划,项目范围、成本、进度基准作为依据,查看项目的各个方面,通过组织全体团体成员会议来解读由各监控过程提供的信息,之后我与项目管理团队一起制订所需措施,确保项目绩效达到预期要求。在一个项目中,变更是必然的,也是不可避免的,进度拖延,成本失控,客户有新的需求等都会引起项目的变更。在本项目中,我要求有处于工作状态的产品,开发人员才可以对其任意修改,修改完成后,重新入库即可。

数据知道的博客 6888

031、速度前馈与加速度前馈

摘要: 本文通过追剪机调试案例,阐述了速度前馈和加速度前馈在运动控制中的关键作用。前馈不是高级技巧,而是解决动态响应问题的必要手段:速度前馈通过预测速度变化提前补偿,加速度前馈则针对惯量变化提供力矩补偿。实现时需注意信号平滑处理,避免噪声放大。前馈与PID分工明确,前馈承担主要动态响应,PID处理残余误差。调试应先调前馈再微调PID,前馈增益需计算而非仅凭参数调整,并允许适当残余误差。前馈作为开环补偿不会影响系统稳定性,但需配合平滑的指令生成器使用。(149字)

m0_50546716的博客 292

数据库事务隔离级别与Spring传播行为深度解析

摘要:本文深入剖析数据库事务隔离级别与Spring传播行为的技术原理与实战应用。通过电商支付、批量处理等真实案例,揭示事务管理的核心难点:脏读、不可重复读、幻读等并发问题,以及死锁、性能下降等常见陷阱。文章对比了四种隔离级别(READ UNCOMMITTED到SERIALIZABLE)的实现机制与性能差异,详解Spring七种传播行为的工作流程,提供源码级分析。针对企业级场景,给出支付系统、批量处理等典型场景的优化方案,包括事务拆分、异步处理等技巧,并配套监控配置与故障排查方法。最后总结出"事务军

七夜zippoe的博客 2638

【uni-app】PDA扫码枪获取扫码数据APP(通俗易懂),聚焦频繁弹软键盘输入法等各种坑完美解决方法,附完整代码

uniapp PDA扫码枪获取扫码数据APP(通俗易懂),频繁弹软键盘等各种坑完美解决方法

coderYYY的博客 7420

数据库事务4种隔离级别及7种传播行为

一:数据库的事物隔离级别与传播行为总结: 脏数据   脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。 不可重复读   在一个事务...

适恒 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Spring 事务】事务隔离级别与事务传播机制:从理论到业务落地实操

本文聚焦 Spring 事务的隔离级别与传播机制两大核心内容:先解析 MySQL 的 4 种隔离级别(读未提交到串行化)及对应并发问题,再说明 Spring 对其的 5 种抽象配置;接着详解事务传播机制的 7 种规则(含默认的 REQUIRED、独立事务 REQUIRES_NEW 等),结合用户注册 + 日志记录的实战场景,演示不同传播机制的执行效果。重点对比 REQUIRED 与 NESTED 的差异 —— 前者全事务回滚,后者支持局部回滚,通过代码示例与结果分析,解决业务数据一致性问题。

独断万古他化的博客 6682

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

Carefree_State的博客 5625

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring事务七大传播机制与五个隔离级别

Spring事务七大传播机制与五个隔离级别

延宝小白马的博客 1万+

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

@Transactional详解之事务隔离级别及事务传播机制

关关的博客 2598

一文讲透 Spring 事务:传播行为、隔离级别与底层原理

本文系统介绍了Spring事务的核心机制与应用要点。主要内容包括:1)事务类型(本地/全局)与管理方式(编程式/声明式);2)7种传播行为的区别,重点对比REQUIRES_NEW与NESTED;3)@Transactional的AOP代理实现原理及ThreadLocal同步机制;4)隔离级别选择与异常回滚规则;5)代理方式选择(JDK/CGLIB)及注意事项;6)AOP通知执行顺序的最新规范。文章强调理解传播行为、回滚规则和代理边界对避免事务失效的重要性,指出Spring事务本质是通过统一抽象层简化数据库事

weixin_51228134的博客 1万+

MySQL数据库事务隔离级别,特性和传播行为

数据库:按照数据结构来组织、存储和管理数据的仓库事务:指具体的事情、杂务。数据库事务:简单的说就是对数据库访问并可能进行操作的一系列行为。

baomingshu的博客 1198

Spring 事务有几个隔离级别? Spring 有哪几种事务传播行为? Spring 事务传播行为有什么用?

【代码】Spring 事务有几个隔离级别?Spring 有哪几种事务传播行为?Spring 事务传播行为有什么用?

weixin_43521001的博客 874

Spring的四种事务特性,五种隔离级别,七种传播行为

Spring事务:什么是事务:事务逻辑上的一组对数据对操作,组成这些操作的各个逻辑单元,要么一起成功,要么一起失败。事务特性(4种):原子性(atomicity):强调事务的不可分割;一致性(consistency):事务的执行前后数据的完整性保持一致;隔离性(isolation):一个事务的执行的过程中,不应该受到其他事务的干扰;持久性(durability):事务一旦结束,数据就持久到数据库。...

nwj1989的专栏 5315

【Spring】事务的隔离级别,Spring的事务隔离级别和事务传播机制

本文回顾了MySQL的四种事务隔离级别(读未提交、读提交、可重复读、串行化),并介绍了Spring框架中的五种事务隔离级别和七种事务传播机制。MySQL的隔离级别解决了并发事务的数据一致性问题,而Spring的事务传播机制则处理了事务在方法调用间的传递行为。文章详细说明了每种传播机制的特点,如REQUIRED(默认)、REQUIRES_NEW(创建新事务)等,并通过源码展示了Spring中枚举类的实现方式。最后提到可以通过@Transactional注解的isolation和propagation属性来设置

Yeeear的博客 1075

事务的传播行为,分别在spring和mysql中讲解

本文对比分析了Spring框架与MySQL数据库中的事务传播机制。Spring在应用层定义了7种传播行为(如REQUIRED、REQUIRES_NEW等),通过AOP代理控制事务交互;MySQL则通过存储引擎(如InnoDB)提供底层事务支持,包括保存点机制和自动提交特性。两者协作实现复杂事务场景:Spring的传播行为规则依赖MySQL的基础事务能力,如NESTED对应保存点机制,REQUIRES_NEW依赖事务独立性。这种分层设计使开发者能在应用层灵活控制事务边界,同时确保数据库层的原子性和隔离性。

多多的博客 1304

SpringBoot之事务处理:隔离级别与传播行为

在Spring中,数据库事务是通过AOP技术来提供服务的。对于声明式事务,是使用@Transactional进行标注的。在@Transactional允许配置许多事物的属性,如事务的隔离级别与传播行为。 1. 隔离级别(isolation) 数据库标准提出了4种isolation事务隔离级别,分别为:未提交读、读写提交、可重复读和串行化。源码如下: /*** * 隔离级别数字数字配置含义...

weixin_40910372的博客 3818

Spring五个事务隔离级别和七个事务传播行为

事务隔离级别 隔离级别 1 DEFAULT 使用底层数据库的默认隔离级别,大部分数据库,默认隔离级别都是READ_COMMITED 2 READ_UNCOMMITED 允许事务读取未被其他事务提交的更改。脏读,不可重复读,幻读都可能会出现. 3 READ_COMMITED 只允许事务读取已经被其他事务提交的更改,可以避免脏读,但不可重复读和幻读问...

江城宴的博客 1243
上一篇: JVM:JMM介绍(简单明了版本)
下一篇: 二十分钟带你速通JUC
java烤冷面
博客等级 码龄4年 177粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值