初识事物

事务管理是企业级应用程序开发中必不可少的技术,用来确保一组操作的时候 数据的完整性和一致性

技术委员 没钱了 班长----2000 班长 --- 赚钱 (1:从班长的卡里扣钱 2:给技术组长的卡里增钱)
2000 10

例如去银行存款转账张三给李四转钱,这个过程就是我们所说的一个事物

一个完整的事物需要满足以下的特性
原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用
一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功
隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏
持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中

这就是事务的四个关键属性(ACID)

Spring既支持编程式事务管理,也支持声明式的事务管理

1:编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码

2:声明式事务管理:大多数情况下比编程式事务管理更好用。它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。

我们需要首先来解释两个比较专业的概念,事物的传播行为和事物的隔离特性

spring事务的传播行为说的是当一个方法调用另一个方法时,事务该如何操作。

spring中常用的的事物类型有着些
service
public int addUser(){
userDao.addUser();
}
1:REQUERED--------------PROPAGATION_REQUIRED
支持当前事务,如果没有事物则新建事物----最常用
2:SUPPORTS
支持当前事务,如果没有事物,则以非事物的模式进行
3:MANDATORY
支持当前事务,如果当前没有事物,则抛出异常
4:REQUIRES-NEW
新建一个事物,如果当前存在事物,则将当前事务挂起
5:NOT-SUPPORTED
以非事物的方式进行,如果当前有事物则将事物挂起
6:NEVER
以非事物的方式进行,如果有事物则挂起
7:NESTED
如果当前存在事物,则嵌套在事物内进行,如果当前没有事物,则和1的方式一样

解释几个非常重要的概念
1:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。
张三原来有3000块钱,又存款2000(这个时间比较长)。同一时间,张三老婆看到的张三卡里的钱还是只有3000,取款了2800,张三悲剧了,着就是脏读

2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据---并且修改。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的
3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样

spring的事务隔离级别

ISOLATION_DEFAULT:使用数据库默认的隔离级别。

ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。
是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。

ISOLATION_READ_COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。
保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据

ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读、不可重复读和幻读。
这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

时间: 2024-10-08 10:34:33

初识事物的相关文章

初识事物管理

在plsql中for update每天都会用上十几次事务管理,java中还是第一次修改. 用的是spring的编程式事物管理,主要事物代码: this.getTransactionTemplate().execute(new TransactionCallback() { public Object doInTransaction(TransactionStatus arg0) { List acList=(List)delMap.get(Dict.LIST); for (int i = 0;

SpringBoot系列教程JPA之update使用姿势

原文: 190623-SpringBoot系列教程JPA之update使用姿势 上面两篇博文拉开了jpa使用姿势的面纱一角,接下来我们继续往下扯,数据插入db之后,并不是说就一层不变了,就好比我在银行开了户,当然是准备往里面存钱了,有存就有取(特别是当下银行利率这么低还不如买比特币屯着,截止19年6月22日,btc已经突破1.1w$,可惜没钱买??)这就是我们今天的主题,数据更新--update的使用姿势 通过本篇博文,您至少可以选到 save() 直接根据id来修改记录 利用jpl 实现查询修

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

[Java Web] 1\Web开发初识——一大堆历史和技术名词

LZ前言 LZ最近发现网络真是个神奇的东西,以前做的好玩的只能自娱自乐(或者说顾影自怜),现在只要发一个帖子,写一个博客,很快能引来一大群小伙伴的围观(有时候还能遇见几个大牛给个战略性的指导)...LZ本来是搞硬件的:从CPU的制造(VHDL).数电.模电再到计算机组成原理.汇编.接口技术,底层的东西算是走马观花地懂了点皮毛,正好大一的时候又了解一点计算机的编程知识(当时第一次用C++Build写出来个Hollo World那个欣喜呀~后来又从win32学到MFC再到C#,嘿嘿,基本上还是皮毛吧

初识windows程序需要了解的知识点

初识一件事物我们会有陌生,我们慢慢地去了解它就会懂,让我带你们一起了解吧. 一.Form是.Net Framework 定义好的一个最基本的窗体类,具有窗体基本属性和方法 属性              说明 MaximizeBox    确定窗体标题栏的右上角------是否有最大化的框-----------默认为True ShowInTaskbar     确定窗体是否出现在----------任务栏中------默认为True StartPosition     确定窗体第一次出现的---

37、mysql初识

之前我们写代码需要存取信息时用的是文件可是用文件存取数据非常局限,今天我们将走进一个新的世界mysql 一.数据库由来 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上.如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题,但需要考虑的问题是:程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,垂直扩展是有极限的.于是我们只能通过水平扩展来增强

初识轻量级Java开源框架 --- Spring

初识轻量级Java开源框架 --- Spring 作者:egg 微博:http://weibo.com/xtfggef 出处:http://blog.csdn.net/zhangerqing spring是一个轻量级Java框架,其核心思想就是DI(Dependency Injection,即依赖注入)和IoC(Inversion of Control,即控制反转),因为其开源.低侵入性,现在已经席卷了很大一部分市场,其最大竞争对手乃是JavaEE框架EJB.EJB3.0以前,由于其笨重以及使用

Restful Web Service初识

Restful Web Service初识 一.Web Services Web Services 是一种基于组件的软件平台,是面向服务的Internet 应用.Web Services 框架的核心技术包括SOAP ,WSDL 和UDDI ,它们都是以标准的XML 文档的形式表示. SOAP (“Simple Object Access Protocol”的缩写)是Web Services 的通信协议.SOAP是一种简单的.轻量级的基于XML 的机制,用于在网络应用程序之间进行结构化数据交换.S

初识python面向对象

一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age=5 #self是实例本身,self.age是实例变量 print("I will eat %s" %food) xiaofan=Person() #实例化,生成对象xiaofanprint(xiaofan.age) #调用对象方法,因为还没有调用eat方法,则使用类方法的值xiaofan