Spring Transaction属性之Isolation

MySQL事务(Transaction)详解 事务定义 事务是一组原子性的SQL查询,或者说是一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一跳语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。 事务的概念并不仅仅专属于Mysql。 事务的例子 关于银行账户转账操作,账户转账是一个完整的业务,最小的单元,不可再分———也就是说银行账户转账是一个事务 以下是银行账户表t_act(账号、余额),进行转账操作 up 阅读详情

上一篇博客《Spring Transaction属性之Propagation》讲解了Propagation相关的知识,这篇博客主要关注于Isolation这个属性。


一、Isolation基础

请先移步Wikipedia:isolation.

Isolation Level VS Phenomena


上图来自wikipeida。

因为我们在申明Isolation Level时,我们仅仅关心什么Phenomena不会出现。所以,在SQL标准中,仅仅规定了Isolation Level会保证哪种读现象不会出现,而不会规定某种读现象一定会出现。

例如,在Isolation设置为Repeatable Read时,不会出现Dirty Read。但是可能会出现Phantoms。如在Postgres中,Repeatable Read的效果就等同于Serializable,而在其他的数据库,如DB2中,Repeatable Read会出现Phantom Read。


二、Isolation例子

Isolation本身前面的wikipedia的链接已经讲的很清楚了,这里我们用Spring Transaction来重现一个Phantom Read的情况。大家感受一下就行了。

假设我们有一张表叫User,User的id是主键。UserService提供了如下两个方法:


    @Transactional(isolation = Isolation.READ_COMMITTED)
    public void insertData() {
        jdbcTemplate.update("insert into User (id, username, age) values (123, 'xxx', 19)");
        doSleep(20000);
    }


    @Transactional(isolation = Isolation.READ_COMMITTED)
    public void readRange() {
        System.out.println(jdbcTemplate.queryForList("select * from User where uses > 18").size());
        doSleep(40000);
        System.out.println(jdbcTemplate.queryForList("select * from User where uses > 18").size());
    }


如果我们同时执行这两个方法:那么insertData中的SQL会在两次Query之间执行,于是readRange的两次结果就会相差一。如果将READ_COMMITTED改为了REPEATABLE_READ,则两次结果会相同。


问题:如果我们的两个方法的Transaction Isolation声明不同,我们应该“听”哪一个的呢?如上面的例子,我们把任意一个改成SERIALIZABLE后,会出现什么样的结果呢?


三、Isolation加强版

下面是何登成的博客,有些关于加锁与Isolation之间关系的分析,很值得一读:

http://hedengcheng.com/?p=771


四、Isolation的实现

常见的实现包括加锁和MVCC(Multi Version Consistency Control),更多的参考资料,移步:

http://coolshell.cn/articles/6790.html

http://en.wikipedia.org/wiki/Multiversion_concurrency_control

http://wiki.postgresql.org/wiki/Serializable

Spring Transaction配置简介 可以从以下多个维度配置Spring事务。propagation表示当前事务与父事务(同一个线程中之前申明事务)的关系。父子事务体现为,方法调用栈的调用先后顺序。 说得更直白点,就是一个方法Method1调用另外一个申明Transaction的Method2,Method1可能申明Transaction,也可能没有,Method2如何处理Transaction的问题。PROPAGATION_REQU 阅读详情

相关推荐

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

数据库事务概述

事务管理欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编

zzxinwow123的博客 2511

MIPS-5级流水线CPU

一、流水线CPU 流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子: 比如第二条指令lui $t2,0x2100 在流水线CPU中执行的就是 可以看到在200-300ns的周期里,IF阶段取到0x00400004处的指令,300-400ns,这条指令到了ID阶段,而IF阶段执行下一条指令。400-500ns,执行这条指令,ALU的结果为0x2100

weixin_43877853的博客 2万+

@Transactional的四种隔离级别测试

不知道大家有没有想过数据库的事务隔离级别和@Transaction设置的隔离级别到底是什么关系? 数据库设置的高隔离级别,@Transaction设置低隔离级别,那么事务的隔离级别到底以谁的为主? 下面就让我们一起去用代码研究一下 首先我们mysql数据库的默认隔离级别是read-commit读已经提交; 那么我们先测试@Transactional(isolation = Isolation.READ_UNCOMMITTED) 读未提交; 先上测试代码 @Service public clas

weixin_44771989的博客 6339

RT-Thread NANO V4.1.1 在Cortex-M0上移植踩坑记:解决内存分配宏导致的线程创建失败

本文详细记录了RT-Thread NANO V4.1.1在Cortex-M0平台移植过程中遇到的内存分配宏配置问题,导致线程创建失败的解决方案。通过分析内存管理算法宏定义,将RT_USING_SMALL_MEM替换为RT_USING_SMALL_MEM_AS_HEAP,成功解决了线程创建问题,为开发者提供了实用的移植经验。

weixin_29189373的博客 306

从零开始理解固定翼能量控制:Pixhawk TECS算法保姆级教程

本文深入解析了Pixhawk飞控中的TECS(总能量控制)算法,旨在解决固定翼无人机纵向控制中速度与高度耦合的经典难题。教程从物理概念出发,阐释了TECS通过管理总能量与分配能量形态来实现油门与升降舵解耦的核心思想,并提供了参数调试的实战指南,帮助开发者优化飞行性能。

white的博客 249

spring的事务中,Isolation4种事务隔离级别的理解

spring事务中的4种隔离事务的理解

ynyeel的博客 2632

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 315

Mysql事务隔离

数据库事务隔离 事务的介绍 事务就是一组原子性的sql查询,或者说是一个独立的工作单元。简而言之,事务内的语句要么全部执行成功,要么全部执行失败。 在Mysql中,事务支持是在引擎层实现的,但并不是所有的Mysql引擎都支持事务,比如MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。 提到事务,我们肯定会想...

weixin_33805557的博客 321

易智联LM401模块学习(一)——初识Lora

Lora

weixin_46046597的博客 1054

Labview数据存储与读取——TDMS文件的创建与写入

Labview数据存储与读取——TDMS文件的创建与写入 你好,这是我在自学Labview编写软件过程中使用的一些功能。我在存储采集卡数据时,通过阅读大量他人的程序,发现TDM及TDMS文件十分适合波形数据的记录,TDMS文件比TDM文件在存储动态类型数据时读写速度更快,而且TDMS 文件没有容量限制,适合存储数据量庞大的测试数据。 前言少叙,书归正传 这一篇博客,说明一下如何使用基本的TDMS功能实现数据文件的存储。 所需要的控件如上图所示,在程序框图——编程——文件I\O——TDMS 中,写入TDMS

滑板小帅程序开发 2万+

spring transaction Attribute

spring transaction Attribute

qq 117791303 262

深入解析基于Fluent的蒸发冷凝相变UDF程序及其在重力热管液体蒸发冷凝变化计算中的应用

ANSYS Fluent是一款功能强大的CFD软件,广泛应用于流体流动、传热、化学反应和多相流等领域的数值模拟。Fluent提供了丰富的物理模型和求解器,支持用户自定义函数(UDF)以扩展其功能,实现更为复杂和特定的模拟需求。UDF是用C语言编写的程序,允许用户在Fluent中自定义物理模型、边界条件、源项等,以实现特定的模拟需求。在处理复杂的相变过程、非均匀物性参数或特定的热传导机制时,UDF提供了极大的灵活性和扩展性。

qq_38334677的博客 1264

spring transaction propagation 02 isolation

spring transaction propagation 02 isolation

qq 117791303 254

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring中的事务属性(Transaction Attribute)

事务属性:描述事务特征的一些列值。为注解中的属性赋值,如: 3. 事务属性详解 3.1 隔离属性(ISOLATION) 隔离属性的概念 概念:隔离属性描述了事务解决并发问题的特征。 事务并发时产生的问题脏读 不可重复读 幻读 总结 数据库对于隔离属性的支持 默认隔离属性 查看数据库默认隔离属性MySQL Oracle 隔离属性在实战中的建议 3.2 传播属性(PROPAGATION) 概念 传播属性的值及其用法默认的传播属性 推荐传播属性的

TheAnnoyingDog的博客 1084

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring Transaction Isolation

原创转载请注明出处:http://agilestyle.iteye.com/blog/2357197   Spring Transaction Isolation   Summary Note: Oracle默认的隔离级别是 READ COMMITTED MySQL InnoDB的隔离级别是 REPEATABLE READ 事务隔离级别越高,就越能保证数据的完整性和...

jvisualvm 190

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

spring-transaction-isolation

事务隔离级别的语义:当前事务执行过程中,通过select,update,delete 操作,对其他事务的影响,反过来也是如此,通俗的说就是 当前事务是否可以看到其他事务的操作结果。   1、如何查询当前数据库的隔离级别(我们只讨论mysql的事务隔离级别)   Sql代码   "font-size: 10px;">select @@tx_isolation;  

tangjunlimei的博客 523

Spring的事务(Transaction)

Spring的事务(Transaction) 问题: 1、什么是事务? 事务是指一组SQL语句的集合,集合中有多条SQL语句,可以是insert、update、select、delete,希望这些SQL语句执行是一致的,作为一个整体执行。要么都成功,要么都失败。 2、什么时候想到使用事务? (1)当操作设计多个表,或者是多个SQL语句的insert、update、delete。需要保证这些语句都是成功才能完成功能,或者都失败是符合要求的。(要么都成功,要么都失败) (2)事务在java开发中如何运用?

陌守 1万+

Spring transaction 事务 --Isolation & Progation

Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。  我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定

lipc_的博客 883

Spring的事务处理、Spring中事务属性(Transaction Attribute) 打卡第十一天

Spring与事务的整合

qq_52677473的博客 269

Spring 声明式事务,propagation属性列表

TransactionDefinition接口中定义,共有7种选项可用: PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATI

lizhen54的博客 339

spring事务的传播属性(propagation attribute)和隔离级别(isolation level)

spring事务的传播属性(propagation attribute)和隔离级别(isolation level) 1 关于propagation属性的7个传播行为 REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务。这是默认值。  SUPPORTS:指定当前方法加入当前事务环境,如果当前没有事务,就

3364

Spring boot 事务(Transaction)

Spring boot 事务(Transaction)问题学习 事务的理解: 事务的四个特性:原子性 【要么全部执行,要么全部不执行】、一致性【事务完成时,必须是所有相关数据保持一致(原子性保证数据库出现了问题之后还是会继续执行保证在了 一致性,隔离性 通过限制可能会出现的覆盖等问题来保证一致性)】、隔离性【一个事务的执行不能被其他事务干扰】、持久性【事务一旦提交,那么就是永久性的存储】 一致性是事务最终的目的,其他三个性质都是为了一致性而存在的。 java支持的事务类型: jdbc事务 :分为手动和

Yang_JK_accrDays的博客 1287

Spring Transaction 分析事务属性

众所周知的ACID属性: 原子性(atomicity)、一致性(consistency)、隔离性(isolation)以及持久性(durability)。我们无法控制一致性、原子性以及持久性,但可以控制超时,设置事务的只读性以指定隔离级别。 Spring在TransactionDefinition接口封装了所有这些设置。    TransactionDefinition接口:   pu...

0与1的世界 262
上一篇: Spring Transaction属性之Propagation
下一篇: DuckDuckGo + Alfred
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值