`
leichenlei
  • 浏览: 128865 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库事务

 
阅读更多

一、事务传播:

 

 

事务传播发生在类似以下情形:

 

class ServiceA {
	//事务1
	void methodA(){
		new ServiceB().methodB();
	}
}


class ServiceB {
	//事务2
	void methodB(){
		
	}
}

 

 

假设methodB的配置是:

 

1: PROPAGATION_REQUIRED 

如果methodA在事务里,那么methodB也在这个事务中运行。

如果methodA不在事务里,那么methodB重新建立一个事务运行。

 

 

2: PROPAGATION_SUPPORTS 

如果methodA在事务里,那么methodB也在这个事务中运行。

如果methodA不在是事务里,那么methodB在非事务中运行。

 

 

3: PROPAGATION_MANDATORY 

如果methodA在一个事务里,那么methodB也在这个事务中运行。

如果methodA不在一个是事务里,那么methodB抛出异常。

 

 

4: PROPAGATION_REQUIRES_NEW 

不管methodA在不在事务里,methodB都重新建立一个事务运行。

methodB事务运行时,methodA事务挂起;methodB事务结束后,methodA事务继续。

 

 

5: PROPAGATION_NOT_SUPPORTED 

不管methodA在不在事务里,methodB都在非事务中运行。

methodB以非事务运行,methodA事务挂起;methodB运行完,methodA事务继续。

 

 

6: PROPAGATION_NEVER 

如果methodA在一个事务里,那么methodB抛出异常。

 

 

7: PROPAGATION_NESTED 

methodB的事务是methodA事务的内嵌事务。

methodB失败回滚到它执行前的 SavePoint,methodA加以处理methodB异常

1. 我们要设置 transactionManager 的 nestedTransactionAllowed 属性为 true。 

2. java.sql.Savepoint 必须存在, 即 jdk 版本要 1.4+ 

3. Connection.getMetaData().supportsSavepoints() 必须为 true, 即 jdbc drive 必须支持 JDBC 3.0 

 

 

 

参考:

http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html

http://www.iteye.com/topic/35907

 

 

 

 

二、事务隔离

 

1、Serializable:最严格的级别,事务串行执行,资源消耗最大; 

2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 

3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。 

4、Read Uncommitted:保证了读取过程中不会读取到非法数据。隔离级别在于处理多事务的并发问题。

 

 

1: Dirty reads--脏读。

比如事务A的未提交(还依然缓存)的数据被事务B读走,如果事务A失败回滚,会导致事务B所读取的的数据是错误的。 

2: non-repeatable reads--不可重复读。

比如事务A中两处读取数据-total-的值。在第一读的时候,total是100,然后事务B就把total的数据改成200,事务A再读一次,结果就发现,total竟然就变成200了,造成事务A数据混乱。 

3: phantom reads--幻读。

数据集改变。比如Select account.id where account.name="ppgogo*",第一次读去了6个符合条件的id,第二次读取的时候,由于事务b把一个帐号的名字由"dd"改成"ppgogo1",结果取出来了7个数据。

 

 

  脏读 不可重复读 幻读
Serializable 不会 不会 不会
Repeatable Read 不会 不会
Read Committed 不会
Read Uncommitted

 

 

参考:

http://blog.csdn.net/sunandice/article/details/7697278

http://bbs.csdn.net/topics/120024254

分享到:
评论

相关推荐

    C#数据库事务原理及实践

    数据库事务是数据库操作的核心概念,尤其在C#编程中,理解并熟练运用数据库事务对于确保数据的完整性和一致性至关重要。数据库事务确保了在多步骤操作中,如果其中一个步骤失败,整个事务可以被回滚,从而避免了数据...

    redis事务与关系型数据库事务比较

    【Redis 事务与关系型数据库事务的比较】 Redis 和关系型数据库(如 MySQL)在事务处理上有显著的差异。在Redis中,事务提供了一种批量执行命令的方式,以确保原子性,但其机制与传统的ACID(原子性、一致性、隔离...

    数据库事务处理ppt

    数据库事务处理是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。事务是数据库操作的基本单元,它包含一组逻辑操作,这些操作要么全部执行,要么全部不执行,以确保数据的原子性。事务处理主要关注两个...

    sql数据库事务机制详解

    ### SQL数据库事务机制详解 #### 事务的基本概念 在数据库管理中,事务是一个非常重要的概念。事务是指作为单个逻辑工作单元执行的一系列操作。它主要用于确保数据在更新过程中的完整性,特别是在同步发生的多步...

    数据库 事务

    数据库事务是数据库操作的核心概念,它是数据库管理系统执行过程中的一个逻辑工作单位,包含了对数据库的一系列操作。在数据库系统中,事务确保数据的一致性和完整性,使得即使在系统出现故障或者并发操作的情况下,...

    java代码-使用java解决数据库事务处理的源代码

    java代码-使用java解决数据库事务处理的源代码 ——学习参考资料:仅用于个人学习使用!

    数据库事务,包括事务的概念、特性

    数据库事务:对数据库事务的讲解,事务的概念 理解事务的特性、分类

    分布式数据库事务处理(COM+实现)

    分布式数据库事务处理是数据库系统中的一个重要概念,尤其是在大型企业级应用和互联网服务中,它能够保证数据的一致性和完整性,即使在多台计算机之间进行数据操作。COM+(Component Object Model Plus)是微软提出...

    数据库事务应用

    ### 数据库事务应用详解 #### 事务处理的重要性与ACID特性 事务处理是现代数据库管理系统(DBMS)中不可或缺的一部分,尤其对于那些涉及复杂业务逻辑、需要确保数据一致性和完整性的应用来说更是如此。事务处理的...

    数据库事务处理课件

    共计132页的ppt,详细讲述数据库事务处理技术

    VC 6.0 执行数据库事务的范例.rar

    在VC 6.0程序中执行数据库事务的一个范例,是一个数据库的高级应用例子,关于设置ADO控件,方法如下:  (1)在程序中选择ResourceView视图,打开“Dialog”节点下的“IDD_AFFAIR_DIALOG”对话框资源,右键单击ADO ...

    数据库事务管理及锁.xmind

    数据库事务管理及锁机制原理剖析:包括事务特性 ACID、数据隔离级别、事务实现的原理、锁机制,及过程中可能遇到的查询效率及死锁问题等

    db2数据库事务日志

    ### DB2数据库事务日志详解及处理方法 #### 一、引言 在数据库管理领域,尤其是对于IBM DB2这样的大型关系型数据库管理系统而言,事务日志管理是至关重要的环节之一。事务日志用于记录数据库中的所有事务操作,确保...

    CSharp数据库事务原理及实践.rar_C#事务逻辑_c# ef 事务开发_c# 使用事务_c# 数据库事务_c#什么是事务

    本文将深入探讨C#语言中与数据库事务相关的原理及实践,包括事务的定义、特性、类型,以及如何在C#中利用Entity Framework(EF)进行事务开发和管理。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组...

    数据库事务在项目中的应用.mp4

    数据库事务在项目中的应用.mp4

    数据库基础数据库事务处理.pptx

    "数据库基础数据库事务处理" 数据库事务处理是数据库系统的基本概念,允许用户对数据进行更改,然后决定是保存还是放弃所做的更改。事务处理是一个不可分割的工作单位,多个步骤绑定在一起形成一个逻辑操作,包含...

    深入理解数据库事务日志:关键作用与应用实践

    数据库事务日志是数据库管理系统中一个至关重要的组成部分,它记录了数据库中所有事务的详细操作记录。这些日志对于确保数据库的一致性、持久性和可恢复性至关重要。本文将详细探讨数据库事务日志的概念、作用、实现...

    数据库事务管理数据库事务管理.ppt

    数据库事务管理是数据库系统中确保数据一致性的重要机制。在数据库环境中,事务是一个逻辑工作单元,它包含了一系列数据库操作,这些操作要么全部执行,要么全部不执行。事务是动态的,与静止的程序不同,它是程序...

Global site tag (gtag.js) - Google Analytics