事務的一致性(包括ACID其他特性)

2021-10-12 16:56:10 字數 1094 閱讀 1299

事務主要有四個特性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持續性(durability)

下面我們分別來介紹著幾種性質。

原子性是指事務中的一系列操作,要麼全做,要麼全部不做。

乙個事務的執行不被另乙個事務的執行干擾。

持續性也稱為永久性,指乙個事務一旦提交,它對資料庫中資料的改變是永久性的。

上面的三個特性都非常好理解,而「一致性」就相對難以理解了。我在很多教材、部落格、知乎和一些論壇上看過對「一致性」的解釋,基本上都是通過舉例子:銀行轉賬的例子來說明。

其實我認為一致性是為了使計算機模擬的虛擬世界更加貼近我們的現實世界而提出來的。我們來考慮這樣的乙個場景:你買一瓶可樂,然後倒了100ml到杯子裡面。那麼你的杯子裡面必然是從原來一滴可樂都沒的狀態變成裝有100ml可樂的狀態,而你的可樂瓶子裡面必然是少了100ml可樂。這是毋庸質疑的,因為在自然界中,我們必須遵循「質量守恆定律」。

我們再考慮乙個場景:你上班擠地鐵的時候,口袋裡裝了1000塊現金,不料被小偷偷了300塊錢。那麼你將損失了300,而小偷收入300,這是必然的。

在我們的生活中還有很多這樣的例子,我們可以大開腦洞地去想一下,其實它們都是「守恆」的。然而,計算機模擬的世界可不是現實世界,而是虛擬世界,虛擬世界未必遵循這種守恆!假設我現在去atm機轉賬,將我的建設銀行卡的1000塊錢轉到中國銀行的卡里去。程式可能是這樣執行的:

第一步:從建設銀行卡的餘額裡扣除1000;

第二步:然後再從中國銀行的卡的餘額裡增加1000。

假如在第一步執行完之後伺服器宕機了,那麼顯然第二步將無法完成,我的建設銀行卡被扣了1000,但中國銀行的卡卻沒增加,這個時候就發生了「不守恆」,我將白白損失了1000塊錢。在資料庫中,這就是所謂的「不一致性狀態」。

可是自然界中是應該要保持「守恆」的,我們用計算機模擬現實世界也應該做到這一點,所以前人才提出了「一致性」的概念,使得計算機世界與現實世界更加貼近。那麼如何實現「一致性」呢?

事實上,acid中的aid都是為了實現c的。事務的最終目的就是為了實現「一致性」。如果轉賬的操作具有原子性,那麼在中途出現錯誤的時候發生回滾,就不會出現不一致的情況,可見,「原子性」和「一致性」是緊密聯絡在一起的!

事務的一致性

首先,我們需要搞清楚為什麼會出現事務.這句話的大體含義就是,事務的產生,其實是為了當應用程式訪問資料庫的時候,事務能夠簡化我們的程式設計模型,不需要我們去考慮各種各樣的潛在錯誤和併發問題.可以想一下當我們使用事務時,要麼提交,要麼回滾,我們不會去考慮網路異常了,伺服器宕機了,同時更改乙個資料怎麼辦對...

acid 事務的原子性 一致性 隔離性 永續性

原子性 多個事情組成乙個單元,要麼同時成功或失敗,不能只執行其中乙個 一致性 事務處理要將資料庫從一種狀態轉變為另一種狀態。一旦提交了修改資料,那麼其它人讀取這個資料,也是被修改後的資料 隔離性 在事務處理提交之前,事務處理的效果不能由系統中其它事務處理 多個使用者,不能同時讀寫同乙個資料,應該有先...

acid 事務的原子性 一致性 隔離性 永續性

原子性 多個事情組成乙個單元,要麼同時成功或失敗,不能只執行其中乙個 一致性 事務處理要將資料庫從一種狀態轉變為另一種狀態。一旦提交了修改資料,那麼其它人讀取這個資料,也是被修改後的資料 隔離性 在事務處理提交之前,事務處理的效果不能由系統中其它事務處理 多個使用者,不能同時讀寫同乙個資料,應該有先...