SQL數(shù)據(jù)庫中事務的ACID特性
作為SQL數(shù)據(jù)庫的使用者,事務是必須要掌握的,下面就將為您介紹SQL數(shù)據(jù)庫中事務的ACID特性,供您參考,希望對您有所幫助。
當事務處理系統(tǒng)創(chuàng)建事務時,將確保事務有某些特性。組件的開發(fā)者們假設事務的特性應該是一些不需要他們親自管理的特性。這些特性稱為ACID特性。
ACID就是:原子性(Atomicity )、一致性( Consistency )、隔離性( Isolation)和持久性(Durabilily)。
1. 原子性
原子性屬性用于標識事務是否完全地完成,一個事務的任何更新要在系統(tǒng)上完全完成,如果由于某種原因出錯,事務不能完成它的全部任務,系統(tǒng)將返回到事務開始前的狀態(tài)。
讓我們再看一下銀行轉帳的例子。如果在轉帳的過程中出現(xiàn)錯誤,整個事務將會回滾。只有當事務中的所有部分都成功執(zhí)行了,才將事務寫入磁盤并使變化永久化。
為了提供回滾或者撤消未提交的變化的能力,許多數(shù)據(jù)源采用日志機制。例如,SQL Server使用一個預寫事務日志,在將數(shù)據(jù)應用于(或提交到)實際數(shù)據(jù)頁面前,先寫在事務日志上。但是,其他一些數(shù)據(jù)源不是關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它們管理未提交事務的方式完全不同。只要事務回滾時,數(shù)據(jù)源可以撤消所有未提交的改變,那么這種技術應該可用于管理事務。
2. 一致性
事務在系統(tǒng)完整性中實施一致性,這通過保證系統(tǒng)的任何事務最后都處于有效狀態(tài)來實現(xiàn)。如果事務成功地完成,那么系統(tǒng)中所有變化將正確地應用,系統(tǒng)處于有效狀態(tài)。如果在事務中出現(xiàn)錯誤,那么系統(tǒng)中的所有變化將自動地回滾,系統(tǒng)返回到原始狀態(tài)。因為事務開
始時系統(tǒng)處于一致狀態(tài),所以現(xiàn)在系統(tǒng)仍然處于一致狀態(tài)。
再讓我們回頭看一下銀行轉帳的例子,在帳戶轉換和資金轉移前,帳戶處于有效狀態(tài)。如果事務成功地完成,并且提交事務,則帳戶處于新的有效的狀態(tài)。如果事務出錯,終止后,帳戶返回到原先的有效狀態(tài)。
記住,事務不負責實施數(shù)據(jù)完整性,而僅僅負責在事務提交或終止以后確保數(shù)據(jù)返回到一致狀態(tài)。理解數(shù)據(jù)完整性規(guī)則并寫代碼實現(xiàn)完整性的重任通常落在開發(fā)者肩上,他們根據(jù)業(yè)務要求進行設計。
當許多用戶同時使用和修改同樣的數(shù)據(jù)時,事務必須保持其數(shù)據(jù)的完整性和一致性。因此我們進一步研究A C I D特性中的下一個特性:隔離性。
3. 隔離性
在隔離狀態(tài)執(zhí)行事務,使它們好像是系統(tǒng)在給定時間內(nèi)執(zhí)行的唯一操作。如果有兩個事務,運行在相同的時間內(nèi),執(zhí)行相同的功能,事務的隔離性將確保每一事務在系統(tǒng)中認為只有該事務在使用系統(tǒng)。
這種屬性有時稱為串行化,為了防止事務操作間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用于同一數(shù)據(jù)。
重要的是,在隔離狀態(tài)執(zhí)行事務,系統(tǒng)的狀態(tài)有可能是不一致的,在結束事務前,應確保系統(tǒng)處于一致狀態(tài)。但是在每個單獨的事務中,系統(tǒng)的狀態(tài)可能會發(fā)生變化。如果事務不是在隔離狀態(tài)運行,它就可能從系統(tǒng)中訪問數(shù)據(jù),而系統(tǒng)可能處于不一致狀態(tài)。通過提供事
務隔離,可以阻止這類事件的發(fā)生。
在銀行的示例中,這意味著在這個系統(tǒng)內(nèi),其他過程和事務在我們的事務完成前看不到我們的事務引起的任何變化,這對于終止的情況非常重要。如果有另一個過程根據(jù)帳戶余額進行相應處理,而它在我們的事務完成前就能看到它造成的變化,那么這個過程的決策可能
建立在錯誤的數(shù)據(jù)之上,因為我們的事務可能終止。這就是說明了為什么事務產(chǎn)生的變化,直到事務完成,才對系統(tǒng)的其他部分可見。
隔離性不僅僅保證多個事務不能同時修改相同數(shù)據(jù),而且能夠保證事務操作產(chǎn)生的變化直到變化被提交或終止時才能對另一個事務可見,并發(fā)的事務彼此之間毫無影響。這就意味著所有要求修改或讀取的數(shù)據(jù)已經(jīng)被鎖定在事務中,直到事務完成才能釋放。大多數(shù)數(shù)據(jù)庫,例如SQL Server以及其他的RDBMS,通過使用鎖定來實現(xiàn)隔離,事務中涉及的各個數(shù)據(jù)項或數(shù)據(jù)集使用鎖定來防止并發(fā)訪問。
4. 持久性
持久性意味著一旦事務執(zhí)行成功,在系統(tǒng)中產(chǎn)生的所有變化將是永久的。應該存在一些檢查點防止在系統(tǒng)失敗時丟失信息。甚至硬件本身失敗,系統(tǒng)的狀態(tài)仍能通過在日志中記錄事務完成的任務進行重建。持久性的概念允許開發(fā)者認為不管系統(tǒng)以后發(fā)生了什么變化,完
成的事務是系統(tǒng)永久的部分。
【編輯推薦】
SQL中where 1=1語句的作用



























