溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL隔離級別有哪些

發(fā)布時間:2021-08-03 17:07:24 來源:億速云 閱讀:136 作者:Leah 欄目:數(shù)據(jù)庫

這篇文章將為大家詳細(xì)講解有關(guān)MySQL隔離級別有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

業(yè)務(wù)的特性

  業(yè)務(wù)是有四個特性(ACID)的,分別是原子性、共同性、阻隔性和耐久性。

  原子性(Atomity):業(yè)務(wù)是最小的履行單位,不允許分割。業(yè)務(wù)的原子性確保動作要么悉數(shù)完結(jié),要么徹底不起作用。

  共同性(Consistency):履行業(yè)務(wù)的前后,數(shù)據(jù)保持共同。

  阻隔性(Isolation):并發(fā)拜訪數(shù)據(jù)庫時,一個用戶的業(yè)務(wù)不能被其他業(yè)務(wù)所攪擾,各個并發(fā)業(yè)務(wù)關(guān)于數(shù)據(jù)庫來說都是獨立的。

  耐久性(Durable):一個業(yè)務(wù)被提交之后。它對數(shù)據(jù)庫中數(shù)據(jù)的改變是耐久的,即便數(shù)據(jù)庫發(fā)生毛病也不應(yīng)該對其有任何影響。

并發(fā)業(yè)務(wù)帶來的問題

  在典型的應(yīng)用程序中,如果是多個業(yè)務(wù)并發(fā)運轉(zhuǎn),經(jīng)常會呈現(xiàn)多個業(yè)務(wù)操作相同的數(shù)據(jù)來完結(jié)各自的任務(wù)(多個用戶對共同數(shù)據(jù)進行操作)的場景。

雖然并發(fā)是有必要的,但卻或許會導(dǎo)致以下的問題。

  1.臟讀(DirtyRead)

  當(dāng)一個業(yè)務(wù)正在拜訪數(shù)據(jù)而且對數(shù)據(jù)進行了修正,而這種修正還沒有提交到數(shù)據(jù)庫中,這時別的一個業(yè)務(wù)也拜訪了這個數(shù)據(jù),然后運用了這個數(shù)據(jù)。因為這個數(shù)據(jù)是還沒有提交的數(shù)據(jù),而這個數(shù)據(jù)或許最后并不會被提交到數(shù)據(jù)庫中,那么別的一個業(yè)務(wù)讀到的這個數(shù)據(jù)是【臟數(shù)據(jù)】,依據(jù)【臟數(shù)據(jù)】所做的操作就或許是不正確的。

  2.丟掉修正(LosttoModify)

  在一個業(yè)務(wù)讀取一個數(shù)據(jù)時,別的一個業(yè)務(wù)也拜訪了該數(shù)據(jù),那么在第一個業(yè)務(wù)中修正了這個數(shù)據(jù)后,第二個業(yè)務(wù)也修正了這個數(shù)據(jù)。這樣就或許會導(dǎo)致第一個業(yè)務(wù)內(nèi)的修正成果被丟掉,因為實際上終究生效的修正是第二個業(yè)務(wù)做的修正,這便是丟掉修正。例如,業(yè)務(wù)1讀取了某表中的數(shù)據(jù)A=21,業(yè)務(wù)2也讀取的是A=21,當(dāng)業(yè)務(wù)1修正了A=A-1,業(yè)務(wù)2也修正了A=A-1,可是終究的成果是A=20,業(yè)務(wù)1的修正被丟掉。

  3.不行重復(fù)讀(Unrepeatableread)

  不行重復(fù)讀指的是在一個業(yè)務(wù)內(nèi)屢次讀取同一數(shù)據(jù),這前后兩次讀取的數(shù)據(jù)卻不共同的情況。因為在這個業(yè)務(wù)還沒有完畢時,或許會有另一個業(yè)務(wù)也拜訪該數(shù)據(jù),或許會造成在第一個業(yè)務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個業(yè)務(wù)的修正導(dǎo)致第一個業(yè)務(wù)兩次讀取的數(shù)據(jù)不相同的問題。在同一個業(yè)務(wù)內(nèi)兩次讀到的數(shù)據(jù)不相同的情況,被稱為不行重復(fù)讀。

  4.幻讀(PhantomRead)

  幻讀與不行重復(fù)讀類似。它發(fā)生在一個業(yè)務(wù)(T1)讀取了幾行數(shù)據(jù),接著另一個并發(fā)業(yè)務(wù)(T2)插入了一些數(shù)據(jù)時。在隨后的查詢中,第一個業(yè)務(wù)(T1)就會發(fā)現(xiàn)多了一些本來不存在的記載,就好像發(fā)生了幻覺相同,所以稱為幻讀。

不行重復(fù)度和幻讀的區(qū)別

  不行重復(fù)讀的要點是修正,強調(diào)的是記載的狀態(tài),比方記載中的一些屬性;幻讀的要點在于新增或許刪除,強調(diào)的是記載的數(shù)量,比方多了幾條記載或少了幾條記載。

  不行重復(fù)讀的比如(同樣的條件,你讀取過的數(shù)據(jù),再次讀取出來發(fā)現(xiàn)值不相同了):業(yè)務(wù)1中的A先生讀取自己的余額為1000的操作還沒完結(jié),業(yè)務(wù)2中的B先生就修正了A先生的余額為2000,導(dǎo)致A先生再次讀自己的余額時余額變?yōu)榱?000,這便是不行重復(fù)讀。

  幻讀的比如(同樣的條件,第1次和第2次讀出來的記載數(shù)不相同):假如薪酬單表中薪酬大于1W的有24人,業(yè)務(wù)1讀取了所有薪酬大于1W的人,共查到24條記載,而這時業(yè)務(wù)2又插入了一條薪酬大于1W的記載,業(yè)務(wù)1再次讀取時查到的記載就變?yōu)榱?5條,這樣就導(dǎo)致了幻讀。

關(guān)于MySQL隔離級別有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI