您好,登錄后才能下訂單哦!
這篇文章主要介紹“mysql的隔離級別是什么”,在日常操作中,相信很多人在mysql的隔離級別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql的隔離級別是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
READ UNCOMMITTED
SELECT語句以非鎖定方式被執(zhí)行,但是一個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。這也被稱為“臟讀”( dirty read)。另外,這個隔離級別象READ COMMITTED一樣作用;簡而言之,在READ UNCOMMITTED的隔離級別下,開啟事物但事物并未提交之前,對于其他的事物都是可見的,記住,從性能的角度上來說,這個級別不見得比其他隔離級別的好;一般情況下非常少用,除非特殊業(yè)務(wù)需求;
READ COMMITTED
一個有些象Oracle的隔離級別。所有SELECT ... FOR UPDATE和SELECT ... LOCK IN SHARE MOD語句僅鎖定索引記錄,而不鎖定記錄前的間隙,因而允許隨意緊挨著已鎖定的記錄插入新記錄。 UPDATE和DELETE語句使用一個帶唯一搜索條件的唯一的索引僅鎖定找到的索引記錄,而不包括記錄前的間隙。在范圍類型UPDATE和DELETE語句, InnoDB必須對范圍覆蓋的間隙設(shè)置next-key鎖定或間隙鎖定以及其它用戶做的塊插入。這是很必要的,因為要讓MySQL復(fù)制和恢復(fù)起作用, “幽靈行”必須被阻止掉;簡而言之,READ COMMITTED其實是解決了READ UNCOMMITTED的可重復(fù)讀問題,即READ COMMITTED的隔離級別下,一個事物的開啟到結(jié)束,它的所做的修改更新刪除 對于其他事物而言都是不可見的;
REPEATABLE READ
這是InnoDB的默認隔離級別。帶唯一搜索條件使用唯一索引的SELECT ... FOR UPDATE, SELECT ... LOCK INSHARE MODE, UPDATE 和DELETE語句只鎖定找到的索引記錄,而不鎖定記錄前的間隙。用其它搜索條件,這些操作采用next-key鎖定,用next-key鎖定或者間隙鎖定鎖住搜索的索引范圍,并且阻止其它用戶的新插入。在持續(xù)讀中,有一個與之前隔離級別重要的差別:在這個級別,在同一事務(wù)內(nèi)所有持續(xù)讀讀取由第一次讀所確定的同一快照。這個慣例意味著如果你在同一事務(wù)內(nèi)發(fā)出數(shù)個無格式SELECT語句,這些SELECT語句對相互之間也是持續(xù)的;REPEATABLE READ解決了惡心的臟讀情況,保證同一個事務(wù)在讀取同樣的記錄的時候能夠保證結(jié)果一致性;但是卻沒能解決幻讀的問題,就是當一個事務(wù)在讀取一個記錄的同時,另外一個事物又在對這個記錄進行插入操作,導致事物再次讀取的時候產(chǎn)生換行
SERIALIZABLE
這個級別類似REPEATABLE READ,但是所有無格式SELECT語句被 隱式轉(zhuǎn)換成SELECT ... LOCK IN SHAREMODE。最高隔離級別,強制事務(wù)串行執(zhí)行,可以說在對每個行數(shù)據(jù)加行鎖,所以會導致很多鎖的爭用或者大量超時問題,性能很差,如果不是特殊的業(yè)務(wù)需求,一般不會選擇這種情況;
附個圖片(來自于高性能mysql):
到此,關(guān)于“mysql的隔離級別是什么”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(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)容。