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