13

Sql Server 2008中隱式和顯式事務之間有什麼區別?隱式和顯式事務之間的區別

在TransactionScope背景中會發生什麼?我使用的是TransactionScope,但在Sql server profiler中,我沒有看到「Begin transaction ...」語句。

它是如何工作的?

回答

9

基本上,當你的TransactionScope設置爲隱C#中,它調用SQL Server的SET命令來使IMPLICIT_TRANSACTIONS模式的連接。您所做的任何事情(使用第二個鏈接中列出的命令之一)會啓動一個保持開放的事務,直到發出提交爲。如果在連接結束時沒有發出提交,則執行隱式ROLLBACK。

這與OFF設置不同,後者也將每個語句放入一個事務中 - 不同之處在於在OFF模式下(因此事務是顯式的),每個事務(單數語句)立即提交

+0

如果你明確地使用`BEGIN TRANSACTION ...',那麼在'implicit_transactions off`模式下說事務是顯式的是正確的,否則這被稱爲* autocommit *模式。 – jlb 2017-01-09 00:03:09

5

在顯式事務模式下,您需要明確啓動事務。在隱式事務模式下,每次提交後都會自動啓動事務。所以你只需要提交。

由於事務是'隱式'啓動的,因此您不會在日誌中看到明確的'BEGIN'。 :)

默認情況下,數據庫在啓用自動提交事務的情況下以顯式事務模式運行。實際上,除非使用BEGIN TRANSACTION開始顯式事務,否則每個數據修改都是在聲明後提交的單獨事務中啓動的。這允許數據庫在失敗時回滾整個語句(例如批量插入或修改觸發器中的其他數據的插入)。

+0

Thanks.I知道,當我們執行一個INSERT statment它隱transaction.You執行說,隱性交易將啓動每個commit.consider後,我們有2個保護 - 諮詢熱點中的TransactionScope是第二statment將拋出exception.when第一statment 1完成它提交和新的事務將創建。你說這個?但是爲什麼當第二個事務拋出異常時,整個事務將在TransactionScope中回滾? – Arian 2011-02-13 20:42:49

+1

@Kerezo否,一旦事務被提交,自上次提交以來,所有的語句將被鎖定到數據庫中。所以如果任何語句拋出一個異常,唯一的損失將是在最後一次提交之後執行的語句數 – zzlalani 2013-11-25 17:23:32

2

隱式事務是自動提交。交易沒有開始或結束。

顯式事務具有與命令 開始,結束和回滾事務開始事務,提交事務和回滾事務。

在顯式事務中,如果發生錯誤,我們可以回滾到隱式事務中不能完成的事務的開始。

0

SqlTransaction - 其中TransactionScope在封面下使用 - 僅發送SQL Server 2000及更早版本的T-SQL BEGIN TRANSACTION命令。

對於SQL Server 2005及更高版本,擴展了TDS協議以允許客戶端直接操作交易而不發送BEGIN TRANSACTION等。要在Profiler中查看這些信息,請選擇「TM:Begin Tran starting」事件等。可能需要選中「顯示所有事件」複選框以查看這些事件 - 它們位於「事務」類別下。

請參閱TDS協議文檔中的Transaction Manager Request,Profiler文檔中的TM: Begin Tran Starting Event Class和.NET Reference Source中的SqlInternalTransaction.ExecuteTransactionYukon

相關問題