資料庫 事務的特性

2021-08-04 10:28:00 字數 1750 閱讀 7914

事務是指對系統進行的一組操作,為了保證系統的完整性,事務需要具有acid特性,具體如下:

1. 原子性(atomic)

乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。

回滾實際上是乙個比較高層抽象的概念,大多數db在實現事務時,是在事務操作的資料快照上進行的(比如,mvcc),並不修改實際的資料,如果有錯並不會提交,所以很自然的支援回滾。

而在其他支援簡單事務的系統中,不會在快照上更新,而直接操作實際資料。可以先預演一邊所有要執行的操作,如果失敗則這些操作不會被執行,通過這種方式很簡單的實現了原子性。

2. 一致性(consistency)

一致性是指事務使得系統從乙個一致的狀態轉換到另乙個一致狀態。事務的一致性決定了乙個系統設計和實現的複雜度。事務可以不同程度的一致性:

強一致性

:讀操作可以立即讀到提交的更新操作。

弱一致性

:提交的更新操作,不一定立即會被讀操作讀到,此種情況會存在乙個不一致視窗,指的是讀操作可以讀到最新值的一段時間。

最終一致性

:是弱一致性的特例。事務更新乙份資料,最終一致性保證在沒有其他事務更新同樣的值的話,最終所有的事務都會讀到之前事務更新的最新值。如果沒有錯誤發生,不一致視窗的大小依賴於:通訊延遲,系統負載等。

其他一致性變體還有:

單調一致性

:如果乙個程序已經讀到乙個值,那麼後續不會讀到更早的值。

會話一致性

:保證客戶端和伺服器互動的會話過程中,讀操作可以讀到更新操作後的最新值。

3. 隔離性(isolation)

併發事務之間互相影響的程度,比如乙個事務會不會讀取到另乙個未提交的事務修改的資料。在事務併發操作時,可能出現的問題有:

髒讀:事務a修改了乙個資料,但未提交,事務b讀到了事務a未提交的更新結果,如果事務a提交失敗,事務b讀到的就是髒資料。

不可重複讀

:在同乙個事務中,對於同乙份資料讀取到的結果不一致。比如,事務b在事務a提交前讀到的結果,和提交後讀到的結果可能不同。

不可重複讀出現的原因就是事務併發修改記錄

,要避免這種情況,最簡單的方法就是對要修改的記錄加鎖,這回導致鎖競爭加劇,影響效能。另一種方法是通過mvcc可以在無鎖的情況下,避免不可重複讀。

幻讀:在同乙個事務中,同乙個查詢多次返回的結果不一致。事務a新增了一條記錄,事務b在事務a提交前後各執行了一次查詢操作,發現後一次比前一次多了一條記錄。

幻讀是由於併發事務增加記錄導致的

,這個不能像不可重複讀通過記錄加鎖解決,因為對於新增的記錄根本無法加鎖。需要將事務序列化,才能避免幻讀。

事務的隔離級別從低到高有:

read uncommitted

:最低的隔離級別,什麼都不需要做,乙個事務可以讀到另乙個事務未提交的結果。所有的併發事務問題都會發生。

read committed

:只有在事務提交後,其更新結果才會被其他事務看見。

可以解決髒讀問題

。repeated read

:在乙個事務中,對於同乙份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交。

可以解決髒讀、不可重複讀

。serialization

:事務序列化執行,隔離級別最高,犧牲了系統的併發性。

可以解決併發事務的所有問題

。通常,在工程實踐中,為了效能的考慮會對隔離性進行折中。

4. 永續性(durability)

事務提交後,對系統的影響是永久的。

資料庫事務特性

事務 transaction 是資料庫系統中 系統操作的乙個邏輯單元,所有的操作要麼全部成功,要麼全部失敗。事務是區分檔案儲存系統和nosql資料庫的重要特性之一,且存在的意義是為了保證即使在併發情況下也能正確的執行crud操作。事務需要保證的四個特性 a 原子性 atomicity 乙個事務 tr...

資料庫事務的特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...

資料庫事務的特性

一 什麼是事務 事務是應用程式中一系列邏輯相關的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務具有原子性 乙個事務中的一系列的操作要麼全部成功,要麼乙個都不做。事務的結束有兩種,當事務中的所以步驟全部成功執行時,事務提交。如果其中乙個步驟失敗,將發生回滾操作,撤消之...