事务知识

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

技术委员  没钱了   班长----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-17 21:35:08

事务知识的相关文章

数据库事务知识

什么是事务? 事务,是工作中的基本逻辑单元.一个事务可能包括数据库的一系列操作,而一个完整的事务保证这些操作都被正确地同步到数据库中,不会发生数据不完整或者错误,或者受到其他干扰. 事务的4个特性 原子性:即作为一个事务,它是不可分割的整体,只有全部操作都完成了,才算结束:其中任何一个操作执行失败,整个事务都要撤销. 一致性:即事务不能破坏数据库的完整性和业务逻辑的一致性.事务不管成功还是失败,事务结束时,整个数据库内部数据都是正确的. 隔离性:即在并发的数据库操作时,不同的事务操作相同的数据时

快速入门系列--WCF--06并发限流、可靠会话和队列服务

这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数量并可以起到削峰的作用,最后还会对之前的事务知识做一定补充. 对于WCF服务来说,其寄宿在一个资源有限的环境中,为了实现服务性能最大化,需要提高其吞吐量即服务的并发性.然而在不进行流量控制的情况下,并发量过多,会使整个服务由于资源耗尽而崩溃.因此为相对平衡的并发数和系统可用性,需要设计一个闸门(Throttling)控制并发的数量. 由于

MyBatis源码浅析

什么是MyBatis MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集.MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. MyBatis简单示例 虽然在使用MyBatis时一般都会使用XML文件,但是本文为了分析程序的简单性,简单的测试程序将不包含XML配置

MySQL 行锁 表锁机制

MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑.遇到了可别乱踩.通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项.还在等啥?经验等你来拿! MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行锁.后者的出现从某种程度上是弥补前者的不足.比如:MyISAM不支持事务,InnoDB支持事务.表锁虽然开销小,锁表快,但高并发下性能低.行锁

一次Spring Transactional嵌套事务使用不同的rollbackFor的分析

起因: 项目期间由于一次异常回滚问题,发现自己在事务知识方面知识的遗漏,趁着这次机会,做了几次rollbackFor的测试. 测试:   现在有两个事务,事务oute包含事务Inner.事务A回滚规则是当事务抛出TestException,其中TestException继承RunTimeException.事务B的回滚规则是事务抛RuntimeException.事务的传播方式都是使用的默认,即 Propagation.REQUIRED.如以下代码: 1 @Override 2 @Transac

基础篇(一)seata简介

所有文章 https://www.cnblogs.com/lay2017/p/12078232.html 正文 原本打算业务时间把事务相关的东西都研究一下,结果人的惰性果然是可以打败一切的,工作忙总是一个很好的借口.于是乎希望走个捷径,直接上手seata这款阿里巴巴发布的分布式事务中间件.寄希望于对这块中间件的阅读获得比较多的事务知识内容. 本文是seata的第一篇,将做一些简要的介绍,有个初步的了解. 什么是seata? seata全称是:simple extensiable autonomo

[Java]Spring数据库事务基础知识

Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 "一荣俱荣,一损俱损"这句话很能体现事务的思想,很多复杂的事物要分步进行,但它们组成一个整体,要么整体生效,要么整体失效.这种思想反映到数据库上,就是多个SQL语句,要么所有执行成功,要么所有执行失败. 数据库事务有严格的定义,它必须同时满足 4 个特性:原子性(Atomic).一致性(Co

学习Spring必学的Java基础知识(7)----事务基础知识

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性

Spring的事务管理基础知识

1.数据库事务基础知识 1)数据库事务有严格的定义,它必须同时满足4个特性:原子性(Atomic).一致性(Consistency).隔离性(Isolation)和持久性(Durability),简称ACID. 2)数据并发的问题:脏读.不可重复读.幻想读.第一类丢失更新.第二类丢失更新. 3)数据库锁机制: 按锁定的对象的不同:一般可以分别表锁定和行锁定,前者对整个表进行锁定,而后者对表中特定行进行锁定.从并发事务锁定的关系上看,可以分为共享锁定和独占锁定.共享锁定会防止独占锁定,但允许其他的