數據庫事務底層原理

參考與:https://www.cnblogs.com/takumicx/p/9998844.html

數據庫事務特性:

ACID 

原子性:指的是我們的操作不可分,要麼執行成功,要麼執行失敗。

隔離性:事務之前互相隔離互不影響

一致性:系統從一個一致性狀態變成另一個一致性狀態,系統狀態滿足完整性約束,(轉賬前後總金額不變)

持久性:事務一旦提交,對數據庫的更新就會持久保存到數據庫中,任何事務和系統故障都不會導致數據丟失。

 

而事務的底層就是爲了保證這四個特性,使用到兩種技術

1、日誌恢復     2、併發控制

併發控制技術保證了事務的隔離性,使數據庫的一致性狀態不會因爲併發執行的操作被破壞。
日誌恢復技術保證了事務的原子性,使一致性狀態不會因事務或系統故障被破壞。同時使已提交的對數據庫的修改不會因系統崩潰而丟失,保證了事務的持久性。

 

併發控制

首先介紹一下 併發異常

1、髒讀

2、不可重複讀

3、幻讀

數據庫的隔離級別

1、讀未提交

2、讀已提交

3、可重複讀

4、序列化

mysql的Innodb存儲引擎通過Next-Key Locking技術在可重複讀級別就消除了幻讀的可能。

快照隔離是多版本併發控制(mvcc)的一種實現方式。(樂觀鎖)

https://blog.csdn.net/w2064004678/article/details/83012387

 

日誌恢復

兩種情況 

  • 在事務提交前出現故障,但是事務對數據庫的部分修改已經寫入磁盤數據庫中。這導致了事務的原子性被破壞。
  • 在系統崩潰前事務已經提交,但數據還在內存緩衝區中,沒有寫入磁盤。系統恢復時將丟失此次已提交的修改。這是對事務持久性的破壞。

日誌恢復的核心思想

  • 撤銷事務undo:將事務更新的所有數據項恢復爲日誌中的舊值,事務撤銷完畢時將插入一條<T abort>記錄。

  • 重做事務redo:將事務更新的所有數據項恢復爲日誌中的新值。

既有start記錄又有commit記錄,將會對事務T0進行重做,執行相應的redo操作。
只有start記錄,將會對T1進行撤銷,執行相應的undo操作,撤銷完畢將寫入一條abort記錄。

 

 

 

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