事務
概念
一組原子性的SQL查詢
特性
ACID
- A:原子性,automicity,事務是不可分割的最小單元,事務提交時查詢語句要麼全部執行,要麼全部回滾
- C:一致性,consistency,從一個一致性狀態轉變成另一個一致性狀態,不會導致數據丟失,如:轉賬不會導致錢憑空消失
- I:隔離性,isolation,一個事物所做的修改在提交前,對其他事務是不可見的
- D:持久性,durability,一旦事務提交,所做的修改就會永久保存到數據庫中
讀取問題
- 髒讀:可以讀取到其他事物未提交修改
- 不可重複讀:同一事務中多次讀取相同的記錄可能結果不同
- 幻讀:同一事務多次中讀取範圍內記錄可能結果不同
事務隔離級別
- 未提交讀:read uncommitted,存在髒讀、不可重複讀、幻讀
- 提交讀:read committed,解決髒讀,存在不可重複讀,幻讀
- 可重複讀:repeatable read,解決髒讀、不可重複讀,存在幻讀
- 可串行化:serializable,解決髒讀、不可重複讀、幻讀
樂觀鎖和悲觀鎖
樂觀鎖:通過自旋來重試,多版本併發控制
悲觀鎖:通過鎖定資源
MySQL實現
存儲引擎
- InnoDN
- MyISAM
- Memory
- ...
InnoDB
默認隔離級別
repeatable read,如何解決幻讀?通過多版本併發控制來解決幻讀。
特性
- 事務、備份、崩潰恢復
- 支持行級鎖
- 支持B-Tree、Full-text等索引
- 不支持Hash索引
MyISAM
特性
- 不支持事務
- 支持表級鎖
- 支持B-Tree、Full-text等索引
- 不支持Hash索引
參考
- MySQL索引原理以及查詢優化 https://www.cnblogs.com/bypp/p/7755307.html
閱讀更多 52技術分享 的文章