事务的隔离级别及传播特性

原创 2018年03月01日 22:28:12
      事务的隔离级别及传播特性
       数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。为什么会有事务隔离级别,SQL Server上实现了哪些事务隔离级别?事务隔离级别的前提是一个多用户、多进程、多线程的并发系统,在这个系统中为了保证数据的一致性和完整性,我们引入了事务隔离级别这个概念,对一个单用户、单线程的应用来说则不存在这个问题。
    为了避免上述几种事务之间的影响,SQL Server通过设置不同的隔离级别来进行不同程度的避免。因为高的隔离等级意味着更多的锁,从而牺牲性能。所以这个选项开放给了用户根据具体的需求进行设置。不过默认的隔离级别Read Commited符合了多数的实际需求.
   SQL Server隔离事务之间的影响是通过锁来实现的,通过阻塞来阻止上述影响不同的隔离级别是通过加不同的锁,造成阻塞来实现的,所以会以付出性能作为代价安全级别越高,处理效率越低;安全级别越低,效率高。这四个级别可以逐一解决脏读,不可重复读,幻读的问题。
       使用方法:SET TRANSACTIONISOLATION LEVEL REPEATABLE READ
       未提交读: 在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。  
       已提交读:只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。已提交读是SQL Server的默认隔离级别。 
       可重复读: 像已提交读级别那样读数据,但会保持共享锁直到事务结束。  
       可串行读(序列化):工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围。这就阻止了新数据插入查询所涉及的范围。
-----------------------------------------------------------------------------------------------------------------------------------------------
  1. read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
  2. read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
  3. repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。
  4. serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻象读。
  5. 脏读、不可重复读、幻象读概念说明:
  • 脏读:指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
  • 不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
  • 幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)
spring事务传播特性:
事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。spring支持7种事务传播行为:
  • propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
  • propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
  • propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
  • propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
  • propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
  • propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作
Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。

java常见面试题整理

ThreadLocalSynchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都...
  • u013033112
  • u013033112
  • 2018-03-09 15:19:53
  • 7

知识库 编号:006

"现在人们通常用来在家里、办公室或网吧玩游戏、上网、打字的计算机被称为PC机,它属于下面一种计算机分类中的哪一类型: " : 微型机 "大禹治水时大禹的家在 " : 重庆涂山 "下列哪种地形地震...
  • ligaorenvip
  • ligaorenvip
  • 2006-11-07 11:03:00
  • 38422

spring事务传播特性和事务隔离级别

一、事务传播特性 转自:http://www.iteye.com/topic/35907 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看...
  • jjavaboy
  • jjavaboy
  • 2015-04-24 10:49:32
  • 6056

spring事务隔离级别及传播特性

Spring在TransactionDefinition接口中定义这些属性 在TransactionDefinition接口中定义了五个不同的事务隔离级别 ISOLATION_DEFAUL...
  • hijiankang
  • hijiankang
  • 2013-06-25 23:33:54
  • 8019

知识库 编号:005

黄梅戏是安徽的地方戏曲剧种之一,因主要曲调由黄梅传入而得名。黄梅在哪个省? : 湖北 诸葛亮的办公地点,武侯祠在什么地方? : 四川成都 投资者在我国券商机构里交易A股、基金、债券时,需交纳的各...
  • ligaorenvip
  • ligaorenvip
  • 2006-11-07 11:03:00
  • 25388

事务传播行为 隔离级别

我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档)  在我们用SSH开发项目的时候,我们一般都是将事务...
  • baidu_18820065
  • baidu_18820065
  • 2016-03-10 20:45:53
  • 677

事务的传播特性和隔离级别理解

事务的几种传播特性 1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启 2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持...
  • zmx729618
  • zmx729618
  • 2015-11-12 16:44:24
  • 602

spring 的事务传播特性与事务的隔离级别

刚开始接触java的时候面试总会遇到的几个问题 1、事务的传播特性 2 事务的隔离级别 3 悲观锁乐观锁  初学者只会看着java面试宝典 夸夸而谈 但具体的细节就挂了 关键是不知道 其应用场景   ...
  • majun_guang
  • majun_guang
  • 2015-09-11 15:40:45
  • 1591

spring aop事务传播方式和隔离级别

一. 传播:        如果两个在代码上不相关的操作,需要放在同一个事务中,这就需要利用到传播特性了。这时调用的传播特性的值就应该是PROPAGATION_REQUIRED。在spring中只需...
  • daiqinge
  • daiqinge
  • 2016-04-18 14:08:32
  • 2790

spring的4种事务特性,5种隔离级别,7种传播行为

spring事务: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性...
  • weixin_38070406
  • weixin_38070406
  • 2017-10-04 11:11:35
  • 3511
收藏助手
不良信息举报
您举报文章:事务的隔离级别及传播特性
举报原因:
原因补充:

(最多只允许输入30个字)