數據庫中的事務及其隔離級別

一、事務的基本要素(ACID)

1.原子性(Atomcity):事務開始後的所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。若執行期間出錯,會回滾到事務開始前的狀態。也就是說事務是一個不可分割的整體,有始有終。

2.一致性(Consistency):事務開始前和結束後,數據庫的完整性和一致性不會受到破壞。

3.隔離性(Durability):同一時間,只允許衣蛾事務請求同一數據,不同的事務之間彼此沒有任何干擾。

4.持久性(Durability):事務完成後,事務對數據庫的所有更新將被保存到數據庫,不能回滾。

二、mysql併發時會產生的問題

1.髒讀:事務A讀取了事務B更新的數據,然後B進行了回滾操作,那麼A讀取的數據就爲髒數據。

2.不可重複讀:事務A多次讀取同一數據時,事務B對這份數據進行了更新且進行了提交,導致事務A多次讀取該數據時前後結果不一致。

3.幻讀:事務A讀取一份數據後,事務B對這份數據增加或者刪除了記錄並且提交,當事務A再次讀取該數據後,發現倆次查詢結果不一致。

不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。

三、事務的隔離級別

通過設置事務的隔離等級,則可相應的避免上述問題。

事務的隔離級別:

隔離級別 髒讀 不可重複讀 幻讀
讀未提交(read uncommitter)1 ✔️ ✔️ ✔️
讀提交(read committed)2 ✔️ ✔️
可重複讀(repeatable read)4 ✔️
串行化(serialzable)8

mysql查詢當前隔離級別: select @@tx_isolation

mysql設置事務隔離級別:set session transaction isolation level xxxx;

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