MYSQL事務(wù)隔離級別詳解

本文將帶大家重新詳細的了解一下mysql的事務(wù)隔離級別
\color{#FF0000}{測試環(huán)境:windows10 + mysql5.7 + innoDB}

  • 一、事務(wù)的基本要素
    1、原子性(Atomicity):一個事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。
    2、一致性(Consistency):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作。
    3、隔離性(Isolation):數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。
    4、持久性(Durability):事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。

  • 二、概念概述
    1、臟讀:讀到了其他事務(wù)未提交的數(shù)據(jù),因為數(shù)據(jù)未提交可能該數(shù)據(jù)會進行回滾。
    2、幻讀:事務(wù)A插入了某些數(shù)據(jù)還未進行提交,但是事務(wù)B也插入了相同記錄的數(shù)據(jù)并比事務(wù)A前提交了,然后在事務(wù)A中讀取數(shù)據(jù),會發(fā)現(xiàn)某些數(shù)據(jù)并未起到作用,而是讀到了事務(wù)B提交的數(shù)據(jù),讓用戶感覺很魔幻,這種現(xiàn)象叫幻讀,通常針對(INSERT)操作。
    3、可重復(fù)讀:指的是在一個事務(wù)內(nèi),最開始讀到的數(shù)據(jù)和事務(wù)結(jié)束前的任意時刻讀到的同一批數(shù)據(jù)都是一致的,通常針對(UPDATE)操作。
    4、不可重復(fù)讀:同一事務(wù)內(nèi),不同時刻讀到的數(shù)據(jù)可能不一樣,可能會受到其他事務(wù)的影響,比如其他事務(wù)改了這批數(shù)據(jù)提交了,通常針對(UPDATE)操作。

  • 三、事務(wù)隔離級別
    1、讀未提交(READ UNCOMMITTED)
    2、讀提交(READ COMMITTED)——寫數(shù)據(jù)會鎖住相應(yīng)的行
    3、可重復(fù)讀(REPEATABLE READ)——加鎖方式是next-key 鎖,如果檢索條件沒有索引,更新數(shù)據(jù)時會鎖住整張表,這樣可以解決幻讀。
    4、串行化(SERIALIZABLE)——讀寫數(shù)據(jù)都會鎖住整張表

    image.png

  • 四、實例講解
    1、讀未提交(READ UNCOMMITTED)
    2ffbb55eb773c21fac1fb74947b69d8.png

    2、讀提交(READ COMMITTED)
    5c5f8d82fc2bfa0c5ec52bb2208d24f.png

    3、可重復(fù)讀(REPEATABLE READ)
    image.png

4、串行化(SERIALIZABLE)

1647249424.jpg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容