前言
事務(wù)一直以來是我最薄弱的環(huán)節(jié),也是我打算重新學(xué)習(xí)SQL Server的出發(fā)點,關(guān)于SQL Server中事務(wù)將分為幾節(jié)來進行闡述,Always to review the basics。
事務(wù)簡介
事務(wù)是一個工作單元,可能包含查詢和修改數(shù)據(jù)以及修改數(shù)據(jù)定義等多個活動。我們可以顯式或隱式的定義事務(wù)邊界??梢允褂肂EGIN TRAN或者BEGIN TRANSACTION語句顯式的定義事務(wù)的開始。如果希望提交事務(wù),可以使用COMMIT TRAN語句顯式的定義事務(wù)結(jié)束。如果不希望提交事務(wù)(即要撤銷更改),可以使用ROLLBACK TRAN或者ROLLBACK TRANSACTION語句-摘抄自SQL Server 2012基礎(chǔ)教程。
如果不顯式的標(biāo)記事務(wù)的邊界,默認(rèn)情況下,SQL Server將把每個單獨語句作為一個事務(wù),換句話說,默認(rèn)情況下,每個單獨語句結(jié)束后SQL Server自動提交事務(wù)??梢酝ㄟ^一個叫做IMPLICIT_TRANSACTIONS的回話選項修改SQL Server處理隱式事務(wù)的方式,此選項默認(rèn)為OFF。當(dāng)此選項為ON時,不需要指定BEGIN TRAN語句標(biāo)記事務(wù)的開始,但是必須以COMMIT TRAN或者ROLLBACK TRAN語句標(biāo)記事務(wù)的結(jié)束-摘抄自SQL Server 2012基礎(chǔ)教程。
事務(wù)具有原子性、一致性、隔離性、持續(xù)性四個屬性,縮寫字母為ACID。
(1)原子性:事務(wù)是一個工作單元,事務(wù)中的所有修改要么提交、要么撤銷,在事務(wù)完成之前如果系統(tǒng)出現(xiàn)故障,重新啟動時SQL Server會撤銷所做的修改。
(2)一致性:一致性是指數(shù)據(jù)的狀態(tài),RDMS提供了以并發(fā)事務(wù)修改和查詢數(shù)據(jù)的能力。
(3)隔離性:隔離是用于控制訪問數(shù)據(jù)的機制,確保事務(wù)所訪問數(shù)據(jù)是在其期望的一致性級別中的數(shù)據(jù),SQL Server支持兩種不同的模式來處理隔離:基于鎖的傳統(tǒng)模式和基于行版本控制的新模式,在企業(yè)內(nèi)部部署的SQL Server中,默認(rèn)是基于鎖的模式。
(4)持續(xù)性:數(shù)據(jù)修改寫入到數(shù)據(jù)庫磁盤上的數(shù)據(jù)部分之前,總是先寫入到數(shù)據(jù)庫的事務(wù)日志磁盤,在提交之后,指令記錄在事務(wù)日志的磁盤上,在尚未修改磁盤上的數(shù)據(jù)部分之前,事務(wù)被認(rèn)為是持續(xù)的,在系統(tǒng)正常或是出現(xiàn)故障啟動時,SQL Server將檢查每個數(shù)據(jù)庫的事務(wù)日志并執(zhí)行具有兩個階段的恢復(fù)過程-重做和撤銷??梢杂萌缦聢D表示四個事務(wù)屬性。
圖片來源:https:/