這篇文章主要介紹“MySQL事務(wù)的四種隔離級別分別是什么”,在日常操作中,相信很多人在MySQL事務(wù)的四種隔離級別分別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL事務(wù)的四種隔離級別分別是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)建站為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,創(chuàng)新互聯(lián)建站核心團隊10余年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。
數(shù)據(jù)庫事務(wù)的隔離級別有4種,由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事務(wù)的并發(fā)操作中可能會出現(xiàn)臟讀,不可重復讀,幻讀。下面通過事例一一闡述它們的概念與聯(lián)系。
Read uncommitted
讀未提交,顧名思義,就是一個事務(wù)可以讀取另一個未提交事務(wù)的數(shù)據(jù)。
事例:老板要給程序員發(fā)工資,程序員的工資是3.6萬/月。但是發(fā)工資時老板不小心按錯了數(shù)字,按成3.9萬/月,該錢已經(jīng)打到程序員的戶口,但是事務(wù)還沒有提交,就在這時,程序員去查看自己這個月的工資,發(fā)現(xiàn)比往常多了3千元,以為漲工資了非常高興。但是老板及時發(fā)現(xiàn)了不對,馬上回滾差點就提交了的事務(wù),將數(shù)字改成3.6萬再提交。
分析:實際程序員這個月的工資還是3.6萬,但是程序員看到的是3.9萬。他看到的是老板還沒提交事務(wù)時的數(shù)據(jù)。這就是臟讀。
那怎么解決臟讀呢?Read committed!讀提交,能解決臟讀問題。
Read committed
讀提交,顧名思義,就是一個事務(wù)要等另一個事務(wù)提交后才能讀取數(shù)據(jù)。
事例:程序員拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(程序員事務(wù)開啟),收費系統(tǒng)事先檢測到他的卡里有3.6萬,就在這個時候??!程序員的妻子要把錢全部轉(zhuǎn)出充當家用,并提交。當收費系統(tǒng)準備扣款時,再檢測卡里的金額,發(fā)現(xiàn)已經(jīng)沒錢了(第二次檢測金額當然要等待妻子轉(zhuǎn)出金額事務(wù)提交完)。程序員就會很郁悶,明明卡里是有錢的…
分析:這就是讀提交,若有事務(wù)對數(shù)據(jù)進行更新(UPDATE)操作時,讀操作事務(wù)要等待這個更新操作事務(wù)提交后才能讀取數(shù)據(jù),可以解決臟讀問題。但在這個事例中,出現(xiàn)了一個事務(wù)范圍內(nèi)兩個相同的查詢卻返回了不同數(shù)據(jù),這就是不可重復讀。
那怎么解決可能的不可重復讀問題?Repeatable read !
Repeatable read
重復讀,就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時,不再允許修改操作
事例:程序員拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(事務(wù)開啟,不允許其他事務(wù)的UPDATE修改操作),收費系統(tǒng)事先檢測到他的卡里有3.6萬。這個時候他的妻子不能轉(zhuǎn)出金額了。接下來收費系統(tǒng)就可以扣款了。
分析:重復讀可以解決不可重復讀問題。寫到這里,應該明白的一點就是,不可重復讀對應的是修改,即UPDATE操作。但是可能還會有幻讀問題。因為幻讀問題對應的是插入INSERT操作,而不是UPDATE操作。
什么時候會出現(xiàn)幻讀?
事例:程序員某一天去消費,花了2千元,然后他的妻子去查看他今天的消費記錄(全表掃描FTS,妻子事務(wù)開啟),看到確實是花了2千元,就在這個時候,程序員花了1萬買了一部電腦,即新增INSERT了一條消費記錄,并提交。當妻子打印程序員的消費記錄清單時(妻子事務(wù)提交),發(fā)現(xiàn)花了1.2萬元,似乎出現(xiàn)了幻覺,這就是幻讀。
那怎么解決幻讀問題?Serializable!
Serializable 序列化
Serializable 是最高的事務(wù)隔離級別,在該級別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復讀與幻讀。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能,一般不使用。
值得一提的是:大多數(shù)數(shù)據(jù)庫默認的事務(wù)隔離級別是Read committed,比如Sql Server , Oracle。Mysql的默認隔離級別是Repeatable read。
到此,關(guān)于“MySQL事務(wù)的四種隔離級別分別是什么”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
文章標題:MySQL事務(wù)的四種隔離級別分別是什么
本文網(wǎng)址:http://weahome.cn/article/iggjed.html