1事務(wù)的概念
什么是事務(wù)衙荐?我們知道,數(shù)據(jù)庫是一個面向多用戶的共享機(jī)制浮创,因此數(shù)據(jù)庫管理系統(tǒng)應(yīng)當(dāng)具備并發(fā)控制和封鎖機(jī)制忧吟,保證數(shù)據(jù)庫系統(tǒng)的正常運(yùn)行。但是當(dāng)多個用戶訪問數(shù)據(jù)庫的時候斩披,如果每一個用戶程序一個一個的串行執(zhí)行溜族,則每一時刻只有一個用戶執(zhí)行對數(shù)據(jù)庫的操作,其他用戶必須等待垦沉,這樣的話會嚴(yán)重影響數(shù)據(jù)庫資源的使用煌抒。所以數(shù)據(jù)庫管理系統(tǒng)必有能夠保證多個用戶同時使用數(shù)據(jù)庫。但是這樣會出現(xiàn)以下三個主要異常問題:
臟讀數(shù)據(jù):當(dāng)?shù)谝粋€用戶修改數(shù)據(jù)時厕倍,第二個用戶在第一個用戶沒有確認(rèn)修改之前讀取了該數(shù)據(jù)寡壮,這時可能會出現(xiàn)臟讀現(xiàn)象。如果第一個用戶確認(rèn)了修改,第二個用戶檢索不到數(shù)據(jù)庫中所修改的數(shù)據(jù)况既,有時這種現(xiàn)象也稱為丟失修改这溅。(看到的不是一回事)
不可重復(fù)讀:當(dāng)某一個用戶對某一行數(shù)據(jù)進(jìn)行第一次讀取過程后,另外一個用戶對該數(shù)據(jù)進(jìn)行了修改棒仍,從第一個用戶的角度來看悲靴,如果再次讀取原先的數(shù)據(jù)會發(fā)現(xiàn)與前次不同,這就是不可重復(fù)讀現(xiàn)象降狠。
發(fā)生幻象:當(dāng)?shù)谝粋€用戶檢查某張表的時候对竣,沒有發(fā)現(xiàn)某個值X庇楞,但是在該用戶還沒操作完成之前榜配,另外一個用戶插入了一個X值,結(jié)果吕晌,導(dǎo)致第一個用戶認(rèn)為數(shù)據(jù)庫沒有X值蛋褥,而實(shí)際上數(shù)據(jù)庫有這個值X。這就是幻象睛驳。
用戶之間相互干擾烙心,出現(xiàn)的以上問題,后果不堪設(shè)想乏沸。因此數(shù)據(jù)庫系統(tǒng)采用事務(wù)的概念來解決這個問題淫茵。
事務(wù)是一系列作為一個邏輯單元來執(zhí)行的操作集合。它是數(shù)據(jù)庫維護(hù)數(shù)據(jù)一致性的單位蹬跃,它將數(shù)據(jù)庫從一致狀態(tài)轉(zhuǎn)變?yōu)樾碌囊恢聽顟B(tài)匙瘪,說的簡單一點(diǎn)就是,如果一組處理步驟要么全部發(fā)生要么一步也不執(zhí)行蝶缀,我們稱該組處理步驟為一個事務(wù)丹喻。這樣就保證了數(shù)據(jù)始終一致的狀態(tài),不至于破壞數(shù)據(jù)的完整性翁都、可靠性碍论。一個事務(wù)執(zhí)行以后,DBMS會自動檢查數(shù)據(jù)庫中數(shù)據(jù)的一致性柄慰。事務(wù)(Transaction)是并發(fā)控制的單位鳍悠,是用戶定義的一個操作序列。這些操作要么都做坐搔,要么都不做藏研,是一個不可分割的工作單位。通過事務(wù)薯蝎,SQL Server能將邏輯相關(guān)的一組操作綁定在一起遥倦,以便服務(wù)器保持?jǐn)?shù)據(jù)的完整性。
(2):事務(wù)通常是以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結(jié)束袒哥。
COMMIT表示提交缩筛,即提交事務(wù)的所有操作。具體地說就是將事務(wù)中所有對數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去堡称,事務(wù)正常結(jié)束瞎抛。
ROLLBACK表示回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障却紧,事務(wù)不能繼續(xù)進(jìn)行桐臊,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有以完成的操作全部撤消,滾回到事務(wù)開始的狀態(tài)晓殊。
(3):事務(wù)運(yùn)行的三種模式:
A:自動提交事務(wù)
每條單獨(dú)的語句都是一個事務(wù)断凶。每個語句后都隱含一個COMMIT。
B:顯式事務(wù)
以BEGIN TRANSACTION顯式開始巫俺,以COMMIT或ROLLBACK顯式結(jié)束认烁。
C:隱性事務(wù)
在前一個事務(wù)完成時,新事務(wù)隱式啟動介汹,但每個事務(wù)仍以COMMIT或ROLLBACK顯式結(jié)束却嗡。
(4):事務(wù)的特性(ACID特性)
A:原子性(Atomicity)
事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么全做嘹承,要么全不做窗价。回滾就用到數(shù)據(jù)庫中的原子性叹卷,如果事物執(zhí)行過程中出現(xiàn)了錯誤撼港,就會回退到最開始。
例如銀行取款事務(wù)分為2個步驟(1)存折減款(2)提取現(xiàn)金豪娜。不可能存折減款餐胀,卻沒有提取現(xiàn)金。2個步驟必須同時完成或者都不完成瘤载。
B:一致性(Consistency)
事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)否灾。一致性與原子性是密切相關(guān)的。一致性是指事物執(zhí)行前和執(zhí)行完成后數(shù)據(jù)庫的完整性沒有被破壞鸣奔。
例如完整性約束a+b=10墨技,一個事務(wù)改變了a,那么b也應(yīng)隨之改變挎狸。
C:隔離性(Isolation)
一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾扣汪。
D:持續(xù)性/永久性(Durability)
持久性意味著當(dāng)系統(tǒng)或介質(zhì)發(fā)生故障時,確保已提交事務(wù)的更新不能丟失锨匆。即一旦一個事務(wù)提交崭别,DBMS保證它對數(shù)據(jù)庫中數(shù)據(jù)的改變應(yīng)該是永久性的冬筒,即對已提交事務(wù)的更新能恢復(fù)。持久性通過數(shù)據(jù)庫備份和恢復(fù)來保證茅主。
注:事務(wù)是恢復(fù)和并發(fā)控制的基本單位舞痰。