本文將帶大家重新詳細的了解一下mysql的事務(wù)隔離級別
一、事務(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)




