1. 程式人生 > >事務基本信息

事務基本信息

處理過程 樂觀 處理 序列 不可重復讀 隔離 對數 數據庫事務 serial

一、事務的定義

  事務(Transaction)是由一系列對系統數據進行訪問與更新的操作所組成的一個程序執行邏輯單元(Unit),俠義上的事務特質數據庫事務。1)當多個應用程序並發訪問數據庫時,事務可以在這些應用之間提供一個隔離方法,以防止彼此的操作互相幹擾。2)事務為數據庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持數據一致性的方法。

二、事務的四個特征(ACID)

  分別是原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持久性(Durability),簡稱ACID特性。

1)原子性

  事務的原子性是指事務必須是一個原子的操作序列單元。事務中包含的各項操作在一次執行過程中,只允許出現兩種狀態之一:①全部成功執行。②全部不執行。

  任何一項操作失敗都將導致整個事務失敗,同時其它已經被執行的操作都將被撤銷並回滾,只有所有的操作全部成功,整個事務才算是成功完成。

2)一致性

  事務的一致性是指事務的執行不能破環數據庫數據的完整性和一致性,一個事務在執行之前和執行之後,數據庫都必須處於一致性狀態。如果數據庫系統在運行過程中發生故障,有些事務尚未完成就被迫中斷,這些未完成的事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說不一致的狀態。

3)隔離性

  事務的隔離性是指在並發環境中,並發的事務是相互隔離的,一個事務的執行不能被其它事務幹擾。也就是說,不同的事務並發操縱相同的數據時,每個事務都有各自完整的數據空間,即一個事務內部的操作及使用的數據對其它並發事務是隔離的,並發執行的各個事務之間不能互相幹擾。

標準AQL規範中定義的4個事務隔離級別,不同的隔離級別對事務的處理不同

①未授權讀取,也被稱為讀未提交,該隔離級別允許臟讀取,其隔離級別最低。事務B可以看到事務A操作過程中的數據變化。

②授權讀取,也被成為讀已提交,只允許讀取已經被提交的數據。

③可重復讀取(Repeatable Read),就是保證在事務處理過程中,多次讀取同一個數據時,其值都和事務開始時刻是一致的。

④串行化(Serializable)是最嚴格的事務隔離級別。要求所有事務都被串行化 執行

4)持久性

  事務的持久性是指一個事務一旦提交,它對數據庫中對應數據的狀態變更就應該是永久的。

技術分享

幻讀(幻影數據):指同樣的事務操作,在前後兩個時間段內執行對同一個數據項的讀取,可能出現不一致的結果。

  事務隔離級別越高,就越能保證數據的完整性和一致性,但同時對並發性能的影響也就越大。通常,對於絕大多數的應用程序來說,可以優先考慮將數據庫系統的隔離級別設置為授權讀取,這能夠在避免臟讀的同時保證較好的並發性能。盡管這種事務隔離級別會導致不可重復讀、虛讀等並發問題,但較為科學的做法是在可能出現這類問題的個別場合中,有應用程序主動采用悲觀鎖或樂觀鎖來進行事務控制。

事務基本信息