參考與: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記錄。