SQL Server 隱式事務

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

爲鏈接將隱性事務模式設置爲打開以後,當數據庫引擎實例首次執行下列任何語句時,都會自動啓動一個事務:數據庫

 

在發出 COMMIT 或 ROLLBACK 語句以前,該事務將一直保持有效。在第一個事務被提交或回滾以後,下次當鏈接執行以上任何語句時,數據庫引擎實例都將自動啓動一個新事務。該實例將不斷地生成隱性事務鏈,直到隱性事務模式關閉爲止。測試

隱式事務模式,在這種模式中,SQL Server在沒有事務存在的狀況下會開始一個事務,但不會像在自動模式中那樣自動執行COMMIT 或ROLLBACK 語句。隱式事務必須顯式結束(既Commit 或者Rollback)。如下語句在沒有事務時隱式開始一個事務。 spa

 

ALTER TABLE事務

GRANTci

FETCHget

DELETEit

CREATEio

REVOKEtable

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;

相關文章
相關標籤/搜索