劉娜
[摘要]數(shù)據(jù)庫(kù)技術(shù)是使用計(jì)算機(jī)管理數(shù)據(jù)的一門(mén)新的科學(xué)技術(shù)。在科技、文化、經(jīng)濟(jì)和軍事等各個(gè)領(lǐng)域,我們會(huì)遇到大量的數(shù)據(jù),這些數(shù)據(jù)不但復(fù)雜,而且數(shù)據(jù)量大,因此如何科學(xué)地管理數(shù)據(jù)是一個(gè)極為重要的課題,特別是在多個(gè)對(duì)象同時(shí)訪問(wèn)同一數(shù)據(jù)時(shí),有可能帶來(lái)一系列的數(shù)據(jù)錯(cuò)誤,本文討論的是在數(shù)據(jù)庫(kù)并發(fā)操作過(guò)程中采用的并發(fā)控制技術(shù)。
[關(guān)鍵詞]SQL Server;事務(wù);并發(fā)控制;ACID特性
數(shù)據(jù)庫(kù)的重要特征是可以為多個(gè)用戶提供數(shù)據(jù)共享,當(dāng)多用戶在同一時(shí)刻訪問(wèn)同一數(shù)據(jù)的時(shí)候,數(shù)據(jù)庫(kù)管理系統(tǒng)(簡(jiǎn)稱(chēng)DBMS)必須提供并發(fā)控制機(jī)制來(lái)協(xié)調(diào)并發(fā)用戶的并發(fā)操作帶來(lái)的問(wèn)題,以保證并發(fā)事務(wù)的隔離性,從而達(dá)到數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性和完整性。
事務(wù)和鎖是兩個(gè)緊密聯(lián)系的概念。事務(wù)使用鎖,防止其他用戶修改另外一個(gè)還沒(méi)有完成的事務(wù)中的數(shù)據(jù)。在關(guān)系數(shù)據(jù)庫(kù)中有多種鎖,允許事務(wù)鎖定不同的資源,鎖就是保護(hù)指定的資源不被其他事務(wù)操作,鎖是保證并發(fā)控制的手段,該過(guò)程中鎖定的方式稱(chēng)為并發(fā)控制機(jī)制。
一、事務(wù)的概念及特性
事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,是用戶定義的一組操作序列,這些操作要么全做,要么全不做。例如轉(zhuǎn)賬交易事務(wù),包含資金轉(zhuǎn)出和轉(zhuǎn)入兩個(gè)操作,只有當(dāng)這兩個(gè)操作都完成,轉(zhuǎn)賬才能成功,或者兩個(gè)操作都不做,也不會(huì)影響原始資金,假設(shè)只完成轉(zhuǎn)出一個(gè)操作,就會(huì)造成資金的丟失。事務(wù)具有四個(gè)特性原子性(Atomicity)、一致性(Consistency)、隔離性(Isotation)和持續(xù)性(Durability),這四個(gè)特性也簡(jiǎn)稱(chēng)為ACID特性。
(一)原子性(Atomic)
事務(wù)是一個(gè)不可分割的工作單位,事務(wù)必須是原子工作單元,對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常與某個(gè)事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴(lài)的。如果系統(tǒng)只執(zhí)行這些操作的一個(gè)子集,則可能會(huì)破壞事務(wù)的總體目標(biāo),原子性消除了系統(tǒng)處理操作子集的可能性。
(二)一致性(Consistency)
一致性是指當(dāng)事務(wù)完成時(shí),必須使所有數(shù)據(jù)都具有一致的狀態(tài)。在關(guān)系型數(shù)據(jù)庫(kù)中,所有的規(guī)則必須應(yīng)用到事務(wù)的修改上,以便維護(hù)所有數(shù)據(jù)的完整性。所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu),在事務(wù)結(jié)束之后,必須保證正確。事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。
(三)隔離性(Isolation)
事務(wù)的執(zhí)行不受其他事務(wù)的干擾,事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的.就是指并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。一個(gè)事務(wù)看到的數(shù)據(jù)要么是另外一個(gè)事務(wù)修改這些事務(wù)之前的狀態(tài),要么是第二個(gè)事務(wù)已經(jīng)修改完成的數(shù)據(jù),但是這個(gè)事務(wù)不能看到正在修改的數(shù)據(jù),這種特征也稱(chēng)為串行性。
(四)持久性(Durability)
事務(wù)一旦提交,對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是永久性的。持久性是指當(dāng)一個(gè)事務(wù)完成之后,它的影響永久性地產(chǎn)生在系統(tǒng)中,也就是這種修改寫(xiě)到了數(shù)據(jù)庫(kù)中。事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久性的,該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。
二、事務(wù)的并發(fā)操作帶來(lái)的問(wèn)題
為了充分利用數(shù)據(jù)庫(kù)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn),允許多個(gè)用戶并行地存取數(shù)據(jù)庫(kù),即同一時(shí)刻多個(gè)事務(wù)操作同一數(shù)據(jù)對(duì)象,稱(chēng)為并發(fā)操作。事物的并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性主要包括以下三類(lèi):
(一)丟失修改
即事務(wù)1和事務(wù)2同時(shí)讀取同一數(shù)據(jù),事務(wù)1更新了該數(shù)據(jù)后,事務(wù)2也修改該數(shù)據(jù)并提交,這時(shí)事務(wù)1的修改就會(huì)被事務(wù)2修改的值覆蓋,這將導(dǎo)致數(shù)據(jù)丟失,稱(chēng)為丟失修改。
(二)不可重復(fù)讀
即事務(wù)1讀取某一數(shù)據(jù)后,事務(wù)2對(duì)其進(jìn)行了修改,當(dāng)事務(wù)1再次讀取數(shù)據(jù)時(shí),得到的數(shù)據(jù)與第一次讀取的值不一樣,稱(chēng)為不可重復(fù)讀。
(三)讀“臟”數(shù)據(jù)
即事務(wù)1讀取并修改某一數(shù)據(jù)后將結(jié)果寫(xiě)回了磁盤(pán),事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)1由于某種原因撤銷(xiāo)并將修改過(guò)的數(shù)據(jù)恢復(fù)原值,這時(shí)事務(wù)2讀取的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,稱(chēng)為讀“臟”數(shù)據(jù)。
三、數(shù)據(jù)庫(kù)并發(fā)控制技術(shù)
并發(fā)控制就是采用正確的方法調(diào)度并發(fā)操作,對(duì)數(shù)據(jù)訪問(wèn)排隊(duì),避免造成數(shù)據(jù)的不一致性,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,并發(fā)控制的目的是保證一個(gè)用戶的工作不會(huì)對(duì)另一個(gè)用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當(dāng)用戶和其他用戶一起操作時(shí),所得的結(jié)果和他單獨(dú)操作時(shí)的結(jié)果是一樣的。在某些情況下,這表示用戶的工作按預(yù)定的方式受其他用戶的影響。
結(jié)語(yǔ)
數(shù)據(jù)庫(kù)的并發(fā)操作將會(huì)造成一系列的數(shù)據(jù)出錯(cuò),本文詳細(xì)分析了并發(fā)操作帶來(lái)的三類(lèi)數(shù)據(jù)不一致性,分別是丟失修改、不可重復(fù)讀和讀“臟”數(shù)據(jù),避免數(shù)據(jù)不一致性的方法和技術(shù)就是并發(fā)控制。全文通過(guò)對(duì)事務(wù)的描述,事務(wù)的并發(fā)操作有可能帶來(lái)的問(wèn)題,提出相應(yīng)的并發(fā)控制策略,為管理維護(hù)數(shù)據(jù)提供了控制機(jī)制保障。
參考文獻(xiàn):
[1]陳俊伽,王韜.關(guān)系數(shù)據(jù)庫(kù)并發(fā)控制機(jī)制研究[J].科學(xué)技術(shù)與工程,2007,7 (18):4635-4637+4643.
[2]毛應(yīng)爽,鄭永春.常用關(guān)系數(shù)據(jù)庫(kù)并發(fā)控制的比較研究[J].制造業(yè)自動(dòng)化,2010 (13):78-80.
[3]陳秋月,張劍妹.關(guān)系數(shù)據(jù)庫(kù)的并發(fā)控制與實(shí)現(xiàn)途徑[J].長(zhǎng)治學(xué)院學(xué)報(bào),2012,29 (5):30-33.