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