自动提交事务

SQL Server 2008 联机丛书(2009 年 7 月)
       自动提交事务

      自动提交模式是 SQL Server 数据库引擎的默认事务管理模式。每个 Transact-SQL 语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。只要没有显式事务或隐性事务覆盖自动提交模式,与数据库引擎实例的连接就以此默认模式操作。自动提交模式也是 ADO、OLE DB、ODBC 和 DB 库的默认模式。

在 BEGIN TRANSACTION 语句启动显式事务隐性事务模式设置为开启之前,与数据库引擎实例的连接一直以自动提交模式操作。当提交或回滚显式事务或关闭隐性事务模式时,连接将返回到自动提交模式。

如果设置为 ON,SET IMPLICIT_TRANSACTIONS 会将连接设置为隐式事务模式。如果设置为 OFF,则使连接恢复为自动提交事务模式。

在自动提交模式下,有时看起来好像数据库引擎实例回滚了整个批处理而不是仅仅一个 SQL 语句。当遇到的错误是编译错误而非运行时错误时,会发生这种情况。编译错误会阻止数据库引擎生成执行计划,这样批处理中的任何语句都不会执行。尽管看起来好像是回滚了产生错误的语句之前的所有语句,但该错误阻止了批处理中的所有语句的执行。在此示例中,由于发生编译错误,第三个批处理中的 INSERT 语句都没有执行。但看起来好像是前两个 INSERT 语句没有执行便进行了回滚。

USE northwind;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUSE (3, 'ccc');  -- Syntax error.
GO
SELECT * FROM TestBatch;  -- Returns no rows.
GO

在此示例中,第三个 INSERT 语句产生运行时重复键错误。由于前两个 INSERT 语句成功地执行并且提交,因此它们在运行时错误之后被保留下来。

USE northwind
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUES (1, 'ccc');  -- Duplicate key error.
GO
SELECT * FROM TestBatch;  -- Returns rows 1 and 2.
GO

数据库引擎使用延迟的名称解析,直到执行时才解析对象名称。在此示例中,执行并提交了前两条 INSERT 语句,在第三条 INSERT 语句由于引用一个不存在的表而产生运行时错误之后,这两行仍然保留在 TestBatch 表中。

USE northwind
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBch VALUES (3, 'ccc');  -- Table name error.
GO
SELECT * FROM TestBatch   -- Returns rows 1 and 2.
GO

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10054891/viewspace-622163/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10054891/viewspace-622163/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值