SQL Server 隐式事务

https://technet.microsoft.com/zh-cn/library/ms188317.aspx

为连接将隐性事务模式设置为打开之后,当数据库引擎实例首次执行下列任何语句时,都会自动启动一个事务:

 

在发出 COMMIT 或 ROLLBACK 语句之前,该事务将一直保持有效。在第一个事务被提交或回滚之后,下次当连接执行以上任何语句时,数据库引擎实例都将自动启动一个新事务。该实例将不断地生成隐性事务链,直到隐性事务模式关闭为止。

隐式事务模式,在这种模式中,SQL Server在没有事务存在的情况下会开始一个事务,但不会像在自动模式中那样自动执行COMMIT 或ROLLBACK 语句。隐式事务必须显式结束(既Commit 或者Rollback)。以下语句在没有事务时隐式开始一个事务。 

 

ALTER TABLE

GRANT

FETCH

DELETE

CREATE

REVOKE

INSERT

SELECT

DROP

OPEN

UPDATE

TRUNCATE TABLE

 

 

Ø       使用隐式事务

1.    启动SQL Server Management Studio并打开一个“新建查询”窗口。

2.    键入并执行以下语句来设置连接为隐式事务模式(此例的代码包含在示例文件UsingImplicitTransactions.sql中):

 SET IMPLICIT_TRANSACTIONS ON;

GO 

3.    执行以下代码创建一个表检验是否已启动事务:

CREATE TABLE T1

     (i int PRIMARY KEY);

4.    用@@TRANCOUNT来测试是否已经打开一个事务。执行如下所示的SELECT语句:

SELECT @@TRANCOUNT AS [Transaction Count];

5.    结果是1,意思是当前连接已经打开了一个事务。0的意思是当前没有事务,一个大于1的数的意思是有嵌套事务(详见后文)。

6.    现在执行以下语句在表中插入一行并再次检查@@TRANCOUNT:

INSERT INTO T1 VALUES(5);

GO

SELECT @@TRANCOUNT AS [Transaction Count];

       @@TRANCOUNT的值仍然是1。由于已经有一个打开的事务,因此SQL Server没有开始一个新的事务。

7.    这个时候必须提交或者回滚事务,不然等到会话结束,表仍然是锁住,因为事务没有提交。现在执行以下语句回滚这个事务并再次检查@@TRANCOUNT。可以看出,在ROLLBACK TRAN 语句执行之后,@@TRANCOUNT 的值变成了0。

ROLLBACK TRAN

GO

SELECT @@TRANCOUNT AS [Transaction Count];

8.    尝试对表T1执行SELECT语句:

SELECT * FROM T1;

9.    由于表不复存在,所以会得到一个错误信息。这个隐式事务起始于CREATE TABLE语句,并且ROLLBACK TRAN语句取消了第一个语句后所做的所有工作。

10.   执行以下代码关闭隐式事务:

SET IMPLICIT_TRANSACTIONS OFF;

转载于:https://www.cnblogs.com/Awarning/p/8268437.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值