热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DB29认证指南(733测验)第二部分:数据处理

本文介绍DB2中的基本概念,重点解释事务单元(UOW)和事务的概念。事务单元是指作为单个原子操作执行的一个或多个SQL查询。

本文将详细介绍 DB2 中的基本概念,特别是事务单元(UOW)和事务的概念。

事务单元是指作为单个原子操作执行的一个或多个 SQL 查询。例如,在 IBM 网站上进行一次在线购物时,需要执行以下三个步骤:

  1. 更新 IBM 网站的库存。
  2. 客户支付购买的商品费用。
  3. 安排商品的配送。

如果库存已经更新,客户也已经支付,但没有创建装货单条目,将会导致客户不满,并且库存记录也会出现不一致。因此,购买过程中的所有相关 SQL 查询必须定义为一个单一的原子操作。

事务中的步骤

在开始事务之前,必须建立与数据库的连接。事务通常以一条可执行语句开始,如果在事务结束后又出现一条可执行语句,则会开始一个新的事务。以下是一些非可执行语句:

  • BEGIN DECLARE SECTION
  • END DECLARE SECTION
  • INCLUDE SQLCA
  • INCLUDE SQLDA
  • DECLARE CURSOR
  • WHENEVER

事务可以通过以下语句结束:

  • COMMIT
  • ROLLBACK

COMMIT 语句结束事务,并使更改对其他进程可见。建议定期执行提交,并在程序中断前单独执行提交。在 Windows 操作系统中,如果没有显式提交事务,DB2 将自动回滚这些事务。在其他操作系统上,DB2 在程序中断时会自动提交所有未决的事务。

ROLLBACK 语句将数据库恢复到事务开始前的状态。回滚可以防止将事务提交后的更改应用到数据库,确保事务中的所有操作要么全部提交,要么全部不提交。DB2 在以下情况下会回滚更改:

  • 日志已满
  • 导致系统进程中断的情况

为了避免循环失败,可以在 ROLLBACK 语句之前使用 WHENEVER SQLWARNING CONTINUE 或 WHENEVER SQLERROR CONTINUE。ROLLBACK 语句不会影响宿主变量的内容。

中断应用程序时应采取以下步骤:

  • 通过 COMMIT 或 ROLLBACK 结束当前事务。
  • 通过发出 CONNECT RESET 语句释放连接。
  • 释放资源,如临时存储、数据结构和共享内存等。

一个应用程序中可以使用多个事务。在一个事务中,可以有多个到数据库的连接。

连接与事务

编程接口有两种标准连接:事务型和非事务型。虽然 DB2 支持这两种连接,但实际上到数据库的连接只有一种——事务型连接。因此,每个 SQL 查询都是事务的一部分。当以非事务模式运行时,使用的编程接口已经启用了自动提交(autocommit)功能,该功能在每个 SQL 操作完成后隐式地发出一条 COMMIT 语句。如果 UOW 需要完成多个查询,记得不要启用 autocommit 功能。

保存点与事务

保存点(savepoint)是在数据库请求失败时,用于撤销数据库管理系统(DBMS)所执行任务的一种机制。保存点使非原子数据库请求活动变为原子的。如果在执行过程中发生错误,保存点可用于撤销从事务开始到收到保存点回滚请求这段时间内的更改。

保存点便于将多个 SQL 语句组合到单个可执行块中。在第一个子语句执行之前,需要先发出一个启动保存点块的请求。如果某个子语句发生错误,只需回滚该子语句。这样可以提供比复合 SQL 语句更细的粒度,对于复合 SQL 语句,一个错误会导致整个块出错,并回滚整个复合 SQL 语句。在保存点语句块的最后,可以释放保存点,也可以回滚到保存点。

以下是一些用于创建和控制保存点的 SQL 语句。要设置一个保存点,可发出 SAVEPOINT SQL 语句。为了使代码更清晰,可以为保存点选择一个更有意义的名称。例如:

SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS

要释放一个保存点,可发出 RELEASE SAVEPOINT SQL 语句。例如:

RELEASE SAVEPOINT SAVEPOINT1

如果不显式地使用 RELEASE SAVEPOINT SQL 语句释放保存点,它将在事务结束时自动释放。

要回滚到保存点,可发出 ROLLBACK TO SAVEPOINT SQL 语句。例如:

ROLLBACK TO SAVEPOINT SAVEPOINT1

推荐阅读
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文介绍了ADO.NET框架中的五个关键组件:Connection、Command、DataAdapter、DataSet和DataReader。每个组件都在数据访问和处理过程中扮演着不可或缺的角色。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
author-avatar
PrinceVince_820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有