MySQL之事务隔离级别--转载
轉自:http://793404905.blog.51cto.com/6179428/1615550
????本文通過實例展示MySQL事務的四種隔離級別。
????1 概念闡述
????1)Read Uncommitted(讀未提交)
????? ?其他事務的在未提交的改動下,當前事務可以察覺。
????2)Read Committed(讀提交)
????? ?其他事務在提交改動之后,當前事務可以察覺,如果其他事務未提交改動,那么不會察覺。
????3) Repeatable Read(可重復讀)
????? ?其他事務提交了改動,并且當前事務也提交的操作,之后才可以察覺改動。
????4) Serializable(可串行化的)
????? ?通過加鎖方式,僅僅保持一個事務執行更新操作,如果其他事務執行更行操作,那么將處于阻塞
????等待狀態。
?
????2 實例展示
????2.1 如何查詢當前MySQL的事務隔離級別
????
????MySQL默認隔離級別是Repeatable Read(可重復讀)
????2.2 設置當前會話的隔離級別
????
????2.3 Read Uncommitted 隔離級別效果展示
? ? 1.A,B兩個事務,將A事務設置為Read Uncommitted事務隔離級別,當B事務,做修改后未提交,A事務可以發現B事務的修改內容。
????2.當A事務修改某條記錄時,B也修改某條記錄,會出現B阻塞等待現象,也就是說A事務修改會具有行級鎖。
????(A事務)
????
????(B事務修改數據,但不提交)
????
????(A事務可以察覺B事務修改的數據)
????
????從上述過程可以發現,在Read Uncommitted隔離級別下,事務之間的修改會相互察覺,因此容易出現臟讀現象。
????而且此時事務A:update counter set value=1002 where id=1,但不提交事務;事務B也執行update counter set value = 1004 where id = 1;會阻塞等待直到超時。原因是因為事務A執行時,鎖住了id=1的這行記錄,因此其他事務必須等待處理完畢再執行;但是其他事務可以處理id!=1的記錄。
????2.4 Read Committed 隔離級別效果展示
????1. A、B兩個事務,假設A事務的隔離級別為Read Committed,那么B事務在執行commit之后,A事務可以發現B的修改。
????2. 與Read UnCommitted一樣,都存在行級鎖的現象。
????(A事務)
????
????(B事務更新但未提交)
????
????(B事務提交后,A事務可以發現B的修改)
????
????2.5 Repeatable Read(可重復讀)
????1. A、B事務,A事務為Repeatable Read,當事務B修改后提交,A仍然無法察覺B的修改效果,而當A事務也提交之后,才可以察覺B的修改。
????2. 同樣存在行級鎖的鎖定
????(A事務)
????
????(B事務修改并提交,A事務仍然無法發覺B的修改)
????
????(A事務也提交后,可以發現B的修改)
????
????2.6 Serializable(可串行化的)
????1. A、B事務,A事務為Serializable,那么B不能執行任何更新操作,因為A會獲取表級鎖,使得其他事務無法訪問。
????(A事務)
????
????(B事務修改操作,無法執行)
????
?
????3 總結
????在MySQL中默認采用可重復讀(Repeatable Read)隔離級別。關于隔離級別的其他知識點以及更細微的介紹,本文不做過多介紹,僅僅介紹基本的概念和理解,如果有興趣的伙伴,可以考慮按照我這種模式,不斷實驗。
轉載于:https://www.cnblogs.com/davidwang456/p/4304648.html
總結
以上是生活随笔為你收集整理的MySQL之事务隔离级别--转载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis的hash操作在集中式sess
- 下一篇: What Influences Meth