文档章节

了解spring事务七种传播方式、事务的4种隔离级别、脏读、重复读、幻读;

起点new
 起点new
发布于 2017/05/04 11:18
字数 1099
阅读 37
收藏 1

1、事务执行过程中会出现几种情况

(1)脏读

出现原因:修改数据的同时可以读取数据;

说明:当事务A对data进行了修改但是未提交事务,此时事务B对data进行读取,并使用事务A修改的数据做业务处理,;

案例:

以取款为例假设A与B同用一张银行卡,银行卡余额为1000

节点

A存款

B取款

T1

开始事务

-

T2

-

开始事务

T3

-

查询余额(余额1000)

T4

-

取款1000(余额0)

T5

查询余额(余额0元)

-

T6

-

撤销事务(余额恢复1000)

T7

存款500

-

T8

提交(余额500)

-

 

(2)不可重复读

出现原因:读取数据的同时可以进行修改;

说明:事务A,事务B同时对dataA进行访问,事务A对data进行读取,事务B对data进行修改,当事务A第一次对data进行读取完后事务B提交,此时当事务A第二次读取该数据时的数据就与第一次读取的数据不同,这种情况成为不可重复读;

案例:

以取款为例假设A与B同用一张银行卡,银行卡余额为1000

节点

A取款

B取款

T1

开始事务

-

T2

-

开始事务

T3

-

查询余额(余额1000元)

T4

查询余额(余额1000元)

 

T5

-

取款1000

T6

-

提交(余额0)

T7

取款1000

-

T8

提交(余额不足)

-

 

(3)幻读

出现原因:读取和修改的时候可以insert数据;

说明:data 表有一条数据,事务A对data进行读取, 事务B对data进行数据新增 ,此时事务A读取只有一条数据,而最后实际data是有两条数据,就好象发生了幻觉一样情况成为幻读;

案例:

以打印银行卡账单存款记录单为例子(银行卡本身有2条存款)

节点

A打印

B存款

T1

开始事务

-

T2

查询存款记录(2条)

-

T3

-

开始事务

T4

-

存款

T5

打印

提交(3条存款记录)

T6

打印结果(3条存款记录)

-

 

 

2、事务的四种级别

(1)READ_UNCOMMITTED(读未提交):,可读取未提交事务的操作数据,这种情况会出现脏读;

(2)READ_COMMITTED(读提交):一个事务等另一个事务提交之后才可进行读取,解决了脏读问题,但会出现重复读问题;

(3)REPEATABLE_READ(重复读):读取事务开启的时候不能对数据进行修改,可能出现幻读问题;

(4)SERIALIZABLE (序列化):是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用;

 

 

3、spring事务的七中传播方式

spring事务的七中传播方式主要是针对于方法中间传递时的事务机制,

例如:以方法B为当前主体 ,方法A调用了方法B ,作为方法B你看方法A

 

(1)PROPAGATION_REQUIRED(默认):如果A有事务则B加入A事务,如果A没有事务则新B建一个事务;

(2)PROPAGATION_NEW:B总是开启一个新的事务,如果A有事务则将A事务挂起先执行B事务;

(3)PROPAGATION_NESTED:RUGU :如果A没事务则新建一个事务,如果A有事务则把B的事务当成A的一个子事务(A事务rolback,commit影响B,B事务rolback,commit不影响A);

(4)PROPAGATION_SUPPORTS:如果A没事务,那就按普通方法执行,如果有A事务则用A的事务(B本身不具备事务);

(5))PROPAGATION_NOT_SUPPORTED:B总是非事务地执行,如果A有事务则把A事务挂起,自己还是以普通方法执行(B本身不具备事务);

(6)PROPAGATION_NEVER:如果A没事务,那就按普通方法执行,如果A有事务则抛出异常((B本身不具备事务);

(7)PROPAGATION_MANDATORY:如果A没事务就抛异常,如果A有事务则使用A的事务(B本身不具备事务);

 

本文章学习资料来源:网络、书籍<架构探险>

© 著作权归作者所有

起点new
粉丝 0
博文 11
码字总数 11812
作品 0
长沙
私信 提问
Spring|Spring事务管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/darlingwood2013/article/details/89511528 Spring|Spring整合JDBC与事务管理 1 事务 事务(Transaction): 事...

叶晚林
04/27
0
0
Spring实践--spring事务:基础知识

一:基础知识介绍 1.1:事务四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么全部失败。 一致性(Consistency):一旦事...

spinachgit
02/15
81
0
Spring 深入理解事务原理

IT虾米的博客 一、事务的基本原理 Spring事务 的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步...

hgqxjj
2018/06/26
0
0
Spring 事务相关知识(转载)

Spring 事务的传播属性 所谓spring事务的传播属性,就是定义在存在多个事务同时存在的时候,spring应该如何处理这些事务的行为。这些属性在TransactionDefinition中定义,具体常量的解释见下...

晨猫
2017/11/09
14
0
spring的事务管理笔记

什么是事务: 事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 事务的特性: 原子性,隔离性,一致性,持久性。 原子性:指的是事务是一个不可分割的工作单位,事务的发生...

铭尘沐风
2015/10/24
401
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
15
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.4K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部