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

转:控制事务(数据库引擎)

阅读更多

转:http://msdn.microsoft.com/zh-cn/library/ms175523(v=sql.105).aspx


SQL Server 2008 R2 其他版本
应用程序主要通过指定事务启动和结束的时间来控制事务。可以使用 Transact-SQL 语句或数据库应用程序编程接口 (API) 函数来指定这些时间。系统还必须能够正确处理那些在事务完成之前便终止事务的错误。

默认情况下,事务按连接级别进行管理。在一个连接上启动一个事务后,该事务结束之前,在该连接上执行的所有 Transact-SQL 语句都是该事务的一部分。但是,在多个活动的结果集 (MARS) 会话中,Transact-SQL 显式或隐式事务将变成批范围的事务,这种事务按批处理级别进行管理。当批处理完成时,如果批范围的事务还没有提交或回滚,SQL Server 将自动回滚该事务。

启动事务
使用 API 函数和 Transact-SQL 语句,可以在 SQL Server 数据库引擎实例中将事务作为显式、自动提交或隐式事务来启动。在 MARS 会话中,Transact-SQL 显式和隐式事务将变成批范围的事务。

显式事务
通过 API 函数或通过发出 Transact-SQL BEGIN TRANSACTION 语句来显式启动事务。

自动提交事务
数据库引擎的默认模式。每个单独的 Transact-SQL 语句都在其完成后提交。不必指定任何语句来控制事务。

隐式事务
通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,下一个 Transact-SQL 语句又将启动一个新事务。

批范围的事务
只适用于多个活动的结果集 (MARS),在 MARS 会话中启动的 Transact-SQL 显式或隐式事务将变成批范围的事务。当批处理完成时,如果批范围的事务还没有提交或回滚,SQL Server 将自动回滚该事务。

事务模式按连接级别进行管理。一个连接的事务模式发生变化对任何其他连接的事务模式没有影响。

结束事务
您可以使用 COMMIT 或 ROLLBACK 语句,或者通过 API 函数来结束事务。

COMMIT
如果事务成功,则提交。COMMIT 语句保证事务的所有修改在数据库中都永久有效。COMMIT 语句还释放事务使用的资源(例如,锁)。

ROLLBACK
如果事务中出现错误,或用户决定取消事务,则回滚该事务。ROLLBACK 语句通过将数据返回到它在事务开始时所处的状态,来取消事务中的所有修改。ROLLBACK 还释放事务占用的资源。

注意
在为支持多个活动的结果集 (MARS) 而建立的连接中,只要还有待执行的请求,就无法提交通过 API 函数启动的显式事务。如果在未完成的操作还在运行时尝试提交此类事务,将导致出现错误。
指定事务边界
可以使用 Transact-SQL 语句或 API 函数和方法来确定数据库引擎事务启动和结束的时间。

Transact-SQL 语句
可以使用 BEGIN TRANSACTION、COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION、ROLLBACK WORK 和 SET IMPLICIT_TRANSACTIONS 语句来描述事务。这些语句主要用于 DB 库应用程序和 Transact-SQL 脚本(如使用 osql 命令提示实用工具运行的脚本)中。

API 函数和方法
数据库 API(如 ODBC、OLE DB、ADO 和 .NET Framework SQLClient 命名空间)包含用于描述事务的函数或方法。这些是数据库引擎应用程序中用于控制事务的主要机制。

每个事务都必须只由其中一种方法管理。在对同一事务使用两种方法会导致出现不确定的结果。例如,不应先使用 ODBC API 函数启动一个事务,再使用 Transact-SQL COMMIT 语句完成该事务。这样将无法向 SQL Server ODBC 驱动程序通知已提交该事务。在这种情况下,应使用 ODBC SQLEndTran 函数结束该事务。

事务处理过程中的错误
如果某个错误使事务无法成功完成,SQL Server 会自动回滚该事务,并释放该事务占用的所有资源。如果客户端与数据库引擎实例的网络连接中断了,那么当网络向实例通知该中断后,该连接的所有未完成事务均会被回滚。如果客户端应用程序失败或客户端计算机崩溃或重新启动,也会中断连接,而且当网络向数据库引擎实例通知该中断后,该实例会回滚所有未完成的连接。如果客户端从该应用程序注销,所有未完成的事务也会被回滚。

如果批中出现运行时语句错误(如违反约束),那么数据库引擎中的默认行为是只回滚产生该错误的语句。可以使用 SET XACT_ABORT 语句更改此行为。在执行 SET XACT_ABORT ON 语句后,任何运行时语句错误都将导致自动回滚当前事务。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。有关详细信息,请参阅 SET XACT_ABORT (Transact-SQL)。

出现错误时,纠正操作(COMMIT 或 ROLLBACK)应包括在应用程序代码中。一种处理错误(包括那些事务中的错误)的有效工具是 Transact-SQL TRY...CATCH 构造。有关包括事务的示例的详细信息,请参阅在 Transact-SQL 中使用 TRY...CATCH 和 TRY...CATCH (Transact-SQL)。[/size]
分享到:
评论

相关推荐

    解密Oracle数据库引擎原理

    在1983年,Oracle发布了第二个版本,并加入了事务处理和并发控制功能,这使得它成为了业界首个支持完全事务处理的数据库引擎。 1985年,Oracle发布了第三个版本,引入了分布式数据库功能。这使得Oracle数据库成为了...

    Apache ShardingSphere 分布式SQL事务与查询引擎

    Apache ShardingSphere 是一个分布式SQL事务与查询引擎,能够支持数据分片、扩展、加密等功能,并且适用于任何数据库。我们社区的主导开发理念是“Database Plus”,旨在构建一个完整的生态系统,使任何数据库都能够...

    计算机病毒与防护:数据库基础.ppt

    物理独立性 逻辑独立性 数据的完整性约束 实体完整性(通过主键约束条件) 参照完整性(通过主外键约束条件) 用户自定义完整性(通过CHECK子句) 数据由DBMS统一管理和控制 查询引擎、事务控制、数据存储模块/组件 ...

    深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

    InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的

    sql server教程.doc

    1. SQL Server的安装和配置:介绍如何下载、安装和配置SQL Server,包括选择适当的版本和设置数据库引擎。 2. 数据库的创建和管理:学习如何创建数据库、表、视图、索引等数据库对象,并了解如何管理数据库的结构和...

    Firebird数据库中文版

    我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能 字符集:Firebird实现了很多国际标准的字符集,包括Unicode。 SQL标准兼容:Firebird 实现了全部...

    达梦数据库_SQL语言手册

    语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作于 体,每一项操作都只需一种操作符表示,格式规范,风格一致,简单方便,很容易为用户所掌 握 两种用户接口使用统一语法结构的语言 语言既是自...

    springboot-curd:springboot操作数据库

    springboot-curd 使用jpa操作数据库 GirlRespority.java interface GirlRespority extends JpaRespority<Girl>{} 使用mybatis操作数据库 ...mysql表存储引擎MyISAM,不支持事务回滚,必须为设置为InnoDB

    27道高级开发数据库面试题目以及答案.pdf

    数据库事务隔离级别; 事务的并发导致的问题; 数据库事务设置不同的隔离级别会导致的不同并发问题 当前读和快照读的意义; mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; MVCC实现过程; mvcc三大...

    mysql数据库引擎

    利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于...

    corobase:面向协程的主内存数据库引擎,VLDB 2021

    CoroBase是一个研究数据库引擎,将事务建模为C ++ 20无堆栈协程以隐藏CPU缓存未命中。 请参阅我们的VLDB 2021文件中的详细信息: [1]何永军,陆家成和王天正。 。 VLDB 2021。 CoroBase继承了ERMIA的共享所有架构...

    Java网上书店管理系统(基于MVC模式编写:前端jsp页面、数据库MySQL、服务器Tomcat).zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    MySQL数据库设计、优化.pptx

    规范 基础规范 全部使用InnoDB引擎,MyISAM适用场景非常少 字符集:latin1 => utf8 => gbk 用数据库来持久化存储以及保证事务一致性,不是运算器 读写分离,主库只写和少量实时读取请求 采用队列方式合并多次写请求...

    事务与连接池的基础学习

    手动控制事务 开启事务:start transaction | begin 提交事务:commit 回滚事务:rollback 事务的特性: 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 一致性:事务必须使数据库...

    springboot学习

    chapter4-2-3:对log4j进行多环境不同日志级别的控制 chapter4-2-4:使用AOP统一处理Web请求日志 chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 ...

    程序员5个刷题网站-InterviewFAQ-database:总结数据库部分的面试常见问题

    程序员5个刷题网站 InterviewFAQ-database 数据库 事务 事务的ACID 原子性 一致性 隔离性 持久性 事务隔离级别 read-uncommitted:读取未提交内容(脏读) ...InnoDB和Falcon存储引擎通过多版本并发控制

    mysql引擎及索引讲解

    利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于...

    Java数据库编程宝典3

    1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL中的事务管理 1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 ...

    微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...),无依赖!

    noear::微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...)可以嵌入到JVM脚本引擎(js, groovy, lua, python, ruby)及GraalVM支持的部分语言。...支持缓存控制和跨数据库事务。

Global site tag (gtag.js) - Google Analytics