`
xgbjmxn
  • 浏览: 269322 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

事务和事务边界

阅读更多
10.1.2 事务和事务边界
http://book.51cto.com  2009-06-16 22:16  牛新庄  清华大学出版社  我要评论(0)

    * 摘要:《循序渐进DB2-系统管理、运行维护与应用案例》第10章锁和并发,本章首先介绍了通用的事务概念,并指出DB2在用户读取、写入数据时的加锁策略、锁模式、兼容性等。本章还介绍了在并发控制中常碰到的4种数据异常现象,同时讲述了 DB2如何使用锁克服这些问题的。本节为大家介绍事务和事务边界。
    * 标签:DB2  系统管理  循序渐进DB2-系统管理、运行维护与应用案例
*

10.1.2  事务和事务边界

事务(也称为工作单元)是一种将一个或多个SQL 操作组合成一个单元的可恢复操作序列,通常位于应用程序进程中。事务的启动和终止定义了数据库的一致性:要么将一个事务中执行的所有SQL操作的结果都应用于数据库(提交),要么完全取消并丢弃已执行的所有SQL操作的结果(回滚)。

运行嵌入式SQL应用程序或脚本,在可执行SQL语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit)的过程(在这种情况下,发出的每个单独的SQL语句被看做单个事务,它一执行就被隐式地提交了)。

在大多数情况下,通过执行COMMIT或ROLLBACK语句来终止事务。当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了-- 即它们被写到磁盘。当执行ROLLBACK语句时,自从事务启动以来对数据库所做的一切更改都被撤销,并且数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是须要用户或应用程序来确保每个事务中执行的SQL操作序列始终会导致一致的数据库。

1. COMMIT和ROLLBACK操作的效果

正如前面提到的,通常通过执行COMMIT或ROLLBACKSQL语句来终止事务。为了理解这些语句如何工作,我们看下面的示例。

如果按所示的顺序执行下列SQL语句(由3个事务组成的简单工作负载):

   1. CONNECT TO SAMPLE 
   2. CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20)) 
   3. INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL') 
   4. INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING') 
   5. COMMIT
   6. 
   7. INSERT INTO DEPARTMENT VALUES(300, 'SALES') 
   8. ROLLBACK
   9. 
  10. INSERT INTO DEPARTMENT VALUES(500, 'MARKETING') 
  11. COMMIT

这将创建一个名为DEPARTMENT的表,它的结构如表10-1所示。

表10-1  表DEPARTMENT的结构

DEPT_ID


DEPT_NAME

100


PAYROLL

200


ACCOUNTING

500


MARKETING

当执行第一个COMMIT语句时,创建名为DEPARTMENT的表并向表中插入两条记录,这两个操作都会变成永久性的。当执行到ROLLBACK语句时,删除插入DEPARTMENT表中的第三条记录,该表返回到执行插入�%
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
上一篇: 10.1.1 数据一致性 下一篇: 10.1.3 锁的概念(1)

    * 相关文章
    * ·15.10 SQL0805和SQL0818错误
    * ·15.9.12 对重要敏感数据加密
    * ·15.9.11 使用LBAC控制数据访问
    * ·15.9.10 使用存储过程控制数据访问
    * ·15.9.9 使用视图控制数据访问

    * 频道热门
    * ·Python 3程序开发指南(第二版)
    * ·Android开发进阶必读——评《精通Android 2》
    * ·谈程序员的思维训练——评《程序员的思维修炼》
    * ·6.2.4 创建完全整合的数据类型
    * ·4.1 控制结构

分享到:
评论

相关推荐

    SpringBoot事务和Spring事务详讲

    - **异常处理**:确保事务边界内的异常被正确捕获和处理,否则可能导致事务未能按预期回滚。 - **并发控制**:在多线程环境下,需要注意事务之间的隔离级别设置,以避免死锁或其他并发问题。 - **性能考量**:过度...

    java事务管理和事务分类

    容器根据事务的边界(如方法调用)自动开始和结束事务,减轻了开发者的负担。 对于JDBC和JTA事务,开发者需要显式地调用`commit()`或`rollback()`来控制事务的结束。而在容器事务中,事务的控制权交给了容器,...

    Spring事务与Java事务比较

    总结来说,Spring 框架的事务管理与 Java 原生的事务管理相比,具有更高的抽象层次和更好的可配置性,使得事务管理更加简单和高效。通过 Spring 的 IOC 容器和 AOP 机制,开发者可以更专注于业务逻辑的实现,而将...

    Java事务设计模式_java_事务设计模式_

    在Spring框架中,可以通过@Transactional注解在方法级别声明事务边界,由Spring容器自动管理事务的生命周期。这种方式降低了事务管理的复杂性,提高了代码的可维护性。 4. **事务设计模式**:这里主要涉及两种模式...

    java分布式事务demo

    2. **Spring框架的声明式事务管理**:Spring通过AOP(面向切面编程)实现了对事务的声明式管理,开发人员只需在配置文件或注解中声明事务边界,而无需手动编写事务管理代码。Spring支持编程式事务管理和声明式事务...

    Spring事务管理Demo

    2. **声明式事务管理**:这是Spring最常用的方式,通过在配置文件或者使用`@Transactional`注解来定义事务边界,使得事务管理与业务逻辑分离,降低了代码的耦合度。`@Transactional`注解可以应用于方法级别,表示该...

    spring常用数据库事务传播属性和事务隔离级别1

    这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下事务的传播属性(Propagation)。这主要决定了在一个事务方法调用另一个事务方法时,如何...

    数据库中事务和锁.ppt

    显式事务则需要明确的BEGIN TRANSACTION、COMMIT TRANSACTION和ROLLBACK TRANSACTION语句来界定事务的边界,提供更精细的控制。 总之,事务和锁是数据库管理系统的核心组件,它们确保了数据的正确性和一致性,同时...

    Hibernate 事务和并发控制

    声明式事务管理则依赖于Spring等框架,通过@Transactional注解来配置事务边界。 接着,我们讨论并发控制。在多用户环境下,同时访问同一数据可能会引发并发问题,如脏读、不可重复读和幻读。Hibernate提供了一些...

    spring 事务传播 demo

    本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...

    spring事务操作试验

    声明式事务管理通过配置元数据(如XML或注解)来控制事务边界,而编程式事务管理则通过TransactionTemplate或PlatformTransactionManager接口直接在代码中管理事务。 在描述中提到的博客文章中,作者可能详细讲解了...

    spring事务,xml方式和注解方式

    总结一下,Spring事务管理提供了XML配置和注解两种方式,使得开发者能够灵活地控制事务的边界和行为。XML方式适合于传统应用,而注解方式则更加简洁,易于理解和维护。无论选择哪种方式,Spring事务管理都能帮助我们...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    1. **基于XML的声明式事务管理**: 在Spring的配置文件中,我们可以通过`<tx:advice>`、`<aop:config>`等元素定义事务的边界,指定哪些方法需要在事务中运行。 2. **基于注解的声明式事务管理**: 使用@Transactional...

    Spring的事务管理小案例

    声明式事务管理则是通过配置或注解来声明事务边界,更加简洁且易于维护。 1. **编程式事务管理**:使用`PlatformTransactionManager`接口和`TransactionDefinition`接口进行事务管理。例如,使用`...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    开发者可以在代码中调用 `TransactionTemplate` 或直接使用 `PlatformTransactionManager` 的方法来管理事务边界。这种方式灵活性较高,适合处理复杂的事务逻辑,但可能导致代码的事务管理部分过于繁琐,不易维护。 ...

    springboot整合spring事务

    7. **注意事务边界**:事务通常应用于单个方法,如果一个事务方法内部调用了另一个事务方法,可能会导致事务边界混乱。这时可以调整事务传播行为或考虑是否需要分开处理。 8. **事务嵌套**:Spring支持事务嵌套,当...

    spring 事务基于注解模式

    而声明式事务管理则是在配置文件或者注解中声明事务边界,将事务管理与业务逻辑分离,使得代码更清晰。 ### 2. 基于注解的事务管理 #### 2.1 `@Transactional` Spring的`@Transactional`注解是声明式事务管理的...

Global site tag (gtag.js) - Google Analytics