【概念原理】四种SQL事务隔离级别和事务ACID特性
2019獨角獸企業重金招聘Python工程師標準>>>
? ? 事務是一組讀寫操作,并且具有只有所有操作都成功才算成功的特性。
事務隔離級別
? ? SQL事務隔離級別由弱到強分別是:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。
? ? 下表是這四種事務隔離級別對臟讀、不可重復讀和幻讀的支持情況:
| 隔離級別 | 臟讀(Dirty read) | 不可重復讀(Non-repeatable read) | 幻讀(Phantom read) |
| READ_UNCOMMITED | 允許 | 允許 | 允許 |
| READ_COMMITED | 不允許 | 允許 | 允許 |
| REPEATABLE_READ | 不允許 | 不允許 | 允許 |
| SERIALIZBLE | 不允許 | 不允許 | 不允許 |
? ? 臟讀:
? ? 臟讀指的是一個事務允許讀取其他正在運行的事務還沒有提交的改變。這種情況的發生主要因為沒有加鎖。
? ? 不可重復讀:
? ? 不可重復讀是指事務A讀取了事務B已經提交的更改數據。不可重復讀指的是一個事務內連續讀卻得到不同的結果,主要因為同時有其他事務更新了我們正在讀取的數據。要達到允許可重復讀的目的,我們必須讓當前事務保持一個讀共享鎖。
? ? 幻讀:
? ? 幻讀指的是事務不是串行發生時發生的一種現象,是事務A讀取了事務B已提交的新增數據。例如第一個事務對一個表的所有數據進行修改,同時第二個事務向表中插入一條新數據。那么操作第一個事務的用戶就發現表中還有沒有修改的數據行,就像發生了幻覺一樣。解決幻讀的方法是增加范圍鎖(range lock)或者表鎖。四種事務隔離級別中只有SERIALIZABLE能夠解決幻讀。
? ? MySQL的默認事務隔離級別是REPEATABLE_READ,ORACLE、SQL Server、DB2和PostgreSQL的默認事務隔離級別是READ_COMMITED。
事務ACID特性
? ? 事務的ACID特性分別指的是原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
? ? 下面分別簡述:
? ? 原子性:將一組操作組合成原子操作,只有所有操作都成功才算成功,否則只要有一個操作失敗就全部失敗
? ? 一致性:事務必須保證系統處于一致性狀態,不管事務如何交織并發執行。必須保證下面幾條:
如果一個操作觸發了間接行為(CASCADE、TRIGGER等),那么間接行為也必須成功,否則事務失敗
如果一個系統包含多個數據節點,那么一致性強制要求修改必須傳播到所有節點
雖然事務可以并行執行,但系統就好像在串行執行事務一樣,即與串行執行事務導致的最終系統狀態是一樣的
? ? 隔離性:隔離性保證一個事務中未提交的修改對外界不可見。隔離性通過鎖機制達到。
? ?持久性:一個成功的事務必須永久改變系統的狀態,在事務執行結束之前狀態改變被記錄在事務日志中。這樣萬一系統崩潰或斷電,未完成的事務也可以回放。
轉載于:https://my.oschina.net/feichexia/blog/202520
總結
以上是生活随笔為你收集整理的【概念原理】四种SQL事务隔离级别和事务ACID特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: grep,egrep及元字符和posix
- 下一篇: 电脑达人教你怎么解决Win7系统盘渐渐变