注:
重度參考了:講的非常好,邏輯清晰)
輕度參考了:概念也比較清晰,只不過沒有對比著這兩個特性講)
概念
原子性:乙個事務內的操作,要麼同時成功,要麼同時失敗
一致性:乙個事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態
從這段話的理解來看,所謂一致性,即,從實際的業務邏輯上來說,最終結果是對的、是跟程式設計師的所期望的結果完全符合的
重點
一致性是基礎,也是最終目的,其他三個特性(原子性、隔離性和永續性)都是為了保證一致性的
在比較簡單的場景(沒有高併發)下,可能會發生一些資料庫崩潰等情況,這個時候,依賴於對日誌的 redo/undo 操作就可以保證一致性
即,這個時候,原子性不能保證一致性。因為從單個事務的角度看,不管是事務 1 還是事務 2,它們都保證的原子性(單個事務內的所有操作全部成功了),但最終,它們並沒***資料庫的一致性(因為從邏輯上說,賬戶 a 應該增加了 200 元,而不是 100 元)
所以,為了保證併發情況下的一致性,又引入了隔離性的概念
隔離性:即事務之間感知不到彼此的存在,就好像只存在本身乙個事務一樣
而對於怎樣實現隔離性,又涉及到了樂觀鎖和悲觀鎖的概念(這兩個概念還不大懂)
小小引申:
不考慮隔離性的時候,可能導致髒讀、幻讀和不可重複讀的問題(這些問題,其實就是導致無法保證一致性的幾種情況)
而隔離級別的概念,就是為了解決上述三個問題
事務一致性與原子性的區別
其實一致性和原子性在事務裡是兩個不太相關,但又很相關的邏輯來的 一致性 這個講的是事務是按照預期生效的,也就是你舉例的那個轉賬的,一致性的核心一部分是靠原子性實現的,而另一部分是邏輯實現。舉個例子吧 轉賬 張三給李四轉賬100元。那資料庫假設需要 張三扣100,李四加100,記錄一條流水。如果流水沒...
oracle事務一致性 原子性
事務的動作要麼一起成功,要麼都不成功,這是事務的原子性。原子性包括 語句級原子性 過程級原子性 事務級原子性 ddl與原子性 如果某條語句 如insert update 執行成功與否會自動控制事務。如設定插入前的觸發器。create table t2 cnt int insert into t2 v...
mysql事務中一致性和原子性的區別
大體含義就是,事務的產生,其實是為了當應用程式訪問資料庫的時候,事務能夠簡化我們的程式設計模型,不需要我們去考慮各種各樣的潛在錯誤和併發問題.可以想一下當我們使用事務時,要麼提交,要麼回滾,我們不會去考慮網路異常了,伺服器宕機了,同時更改乙個資料怎麼辦對吧.因此事務本質上是為了應用層服務的.而不是伴...