淺談對事務(transaction)的理解

我們以轉賬爲例。例如張三家的狗生病了,但是張三現在賬戶上只有20塊錢,而給狗看病需要50塊錢。那麼張三給關係不錯的李四打電話了,要李四轉賬給他30塊錢(李四現在賬戶上有100塊錢)。這個轉賬的過程就需要遵循數據庫的一些特性。

原子性(Automicity)

在現實世界中轉賬是個不可分割的操作。要麼轉賬成功,要麼沒有轉,不存在說轉一半的情況。我們把這種要麼不做要麼全做的規則稱之爲原子性。

隔離性(Isolation)

在張三向李四轉賬的操作分別設爲t1,t2.在現實環境中t1,t2是沒有關係的,先執行t1在執行t2或者是先執行t2在執行t1都是一樣的。

但是在數據庫中t1,t2的操作是交替執行的。有可能出現在寫完t1中李四的賬戶餘額後,t2操作在讀取李四賬戶的值時,李四賬戶的餘額由100元變爲了70元。那李四最後的賬戶餘額則變爲了40元,這樣就造成了轉賬的混亂。所以在數據庫中不僅要保證操作以原子性的方式完成操作,而且還要保證其他的狀態轉換不收本次狀態轉換的影響,這個規則被稱之爲隔離性。

一致性(Consistency)

在轉賬過程中參與轉賬的賬戶總的金額是不變的,這個規則就稱之爲一致性。數據庫中某些操作的原子性和隔離性都是保證一致性的一種手段,但是也不是說原子性和隔離性的操作就一定滿足一致性,比如說舉個極端的例子,張三向李四借了200元。他滿足了原子性和隔離性的操作,但是李四自己本身的賬戶卻只有100塊錢。綜上所述,一致性的操作一定是滿足原子性和隔離性的,但是原子性和隔離性的操作並不一定滿足一致性。

持久性(Durability)

在一個轉態轉換完成後,這個操作的結果將永久的保留在數據庫的表中。這個規則被稱之爲持久性。

事務的概念:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章