在日常開(kāi)發(fā)中抗蠢,尤其是業(yè)務(wù)開(kāi)發(fā)薛躬,少不了利用java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的增刪改查等數(shù)據(jù)操作,這也是java工程師必備技能之一僧界,不僅僅需要對(duì)java語(yǔ)言框架的理解侨嘀,更需要對(duì)數(shù)據(jù)庫(kù)自身體系的理解。
問(wèn)題:Mysql支持的事務(wù)隔離級(jí)別有哪些捂襟,以及悲觀(guān)鎖樂(lè)觀(guān)鎖的應(yīng)用原理和應(yīng)用場(chǎng)景咬腕?
事務(wù)隔離級(jí)別
所謂隔離級(jí)別,就是在數(shù)據(jù)庫(kù)事務(wù)中笆豁,為保證并發(fā)數(shù)據(jù)讀寫(xiě)的正確性而提出的定義郎汪。
每種關(guān)系型數(shù)據(jù)庫(kù)都提供了各自特色的隔離級(jí)別實(shí)現(xiàn)赤赊,雖然在通常的定義中是以鎖為實(shí)現(xiàn)單元闯狱,但實(shí)際實(shí)現(xiàn)千差萬(wàn)別,比如MYsql的InnoDB引擎為例抛计,按照隔離程度從低到高哄孤,依次分為四個(gè)不同的層次:
1、讀未提交吹截,就是一個(gè)事務(wù)能夠看到其他事務(wù)尚未提交的修改瘦陈,這是最低級(jí)的隔離水平,允許出現(xiàn)臟讀
2波俄、讀已提交晨逝,事務(wù)能夠看到的數(shù)據(jù)都是其他事務(wù)已經(jīng)提交的修改,也就是保證不會(huì)看到任何中間性狀態(tài)懦铺,當(dāng)然臟讀也不會(huì)出現(xiàn)捉貌,讀已提交仍然是比較低級(jí)的隔離,允許其他事務(wù)并發(fā)修改數(shù)據(jù)冬念,允許不可重復(fù)讀和幻想讀出現(xiàn)趁窃。
3、可重復(fù)讀急前,保證一個(gè)事務(wù)中多次讀取的數(shù)據(jù)是一致的醒陆,這是Mysql InnoDB引擎的默認(rèn)隔離級(jí)別。但是和一些其他數(shù)據(jù)庫(kù)實(shí)現(xiàn)不同的是裆针,可以簡(jiǎn)單認(rèn)為Mysql在可重復(fù)讀級(jí)別不會(huì)出現(xiàn)幻想讀刨摩。
4寺晌、串行化,并發(fā)事物之間是串行化的澡刹,通常意味著讀取需要獲取共享讀鎖折剃,更新需要獲取排他寫(xiě)鎖。這是最高的隔離級(jí)別像屋。