本文將帶大家重新詳細(xì)的了解一下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ù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個事務(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ù),因?yàn)閿?shù)據(jù)未提交可能該數(shù)據(jù)會進(jìn)行回滾站削。
2坊萝、幻讀:事務(wù)A插入了某些數(shù)據(jù)還未進(jìn)行提交,但是事務(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
-
四、實(shí)例講解
1甘凭、讀未提交(READ UNCOMMITTED)
2ffbb55eb773c21fac1fb74947b69d8.png
2稀拐、讀提交(READ COMMITTED)
5c5f8d82fc2bfa0c5ec52bb2208d24f.png
3、可重復(fù)讀(REPEATABLE READ)
image.png
4对蒲、串行化(SERIALIZABLE)