[基礎(chǔ)]數(shù)據(jù)庫事務(wù)四大特性和隔離級別

事務(wù)四大特性(ACID)

1.原子性(Atomicity)

原子性是指事務(wù)就是一個完整的最小單元(就像原子,這時候別拿夸克啥的說事,理解就行),一個事務(wù)內(nèi)部所有執(zhí)行是一體的,要么一起成功,要么一起失敗回滾,不存在部分成功部分失敗的情況。

2. 一致性(Consistency)

一致性是指事務(wù)前后,數(shù)據(jù)庫狀態(tài)是一致的,方便理解可以參照物理上的“能量守恒”,比如銀行a賬戶給把賬戶轉(zhuǎn)賬,操作結(jié)束勿論成功失敗,兩個賬戶的總金額是不會變的。

3. 隔離性(Isolation)

隔離性是指多個事務(wù)對表的操作是隔離的,主要針對并發(fā)的情況,一個事務(wù)提交前,這個事務(wù)對數(shù)據(jù)庫的修改內(nèi)容是對其他事務(wù)不可見的。

4. 持久性(Durability)

持久性是指事務(wù)的操作,一旦提交,對于數(shù)據(jù)庫中數(shù)據(jù)的改變是永久性的,即使數(shù)據(jù)庫發(fā)生故障也不能丟失已提交事務(wù)所完成的改變。


事務(wù)的隔離級別

事務(wù)的隔離級別從低到高分別是:讀未提交,讀已提交,可重復(fù)讀,串行化

1、Serializable (串行化):最嚴(yán)格的級別,事務(wù)串行執(zhí)行,資源消耗最大;

2、REPEATABLE READ(重復(fù)讀) :保證了一個事務(wù)不會修改已經(jīng)由另一個事務(wù)讀取但未提交(回滾)的數(shù)據(jù)。避免了“臟讀取”和“不可重復(fù)讀取”的情況,但不能避免“幻讀”,但是帶來了更多的性能損失。

3、READ COMMITTED (提交讀):大多數(shù)主流數(shù)據(jù)庫的默認(rèn)事務(wù)等級,保證了一個事務(wù)不會讀到另一個并行事務(wù)已修改但未提交的數(shù)據(jù),避免了“臟讀取”,但不能避免“幻讀”和“不可重復(fù)讀取”。該級別適用于大多數(shù)系統(tǒng)。

4、Read Uncommitted(未提交讀) :事務(wù)中的修改,即使沒有提交,其他事務(wù)也可以看得到,會導(dǎo)致“臟讀”、“幻讀”和“不可重復(fù)讀取”。


最后再解釋下臟讀、不可重復(fù)讀、幻讀:

臟讀:所謂的臟讀,其實就是讀到了別的事務(wù)成功提交前的數(shù)據(jù)。比如事務(wù)B執(zhí)行過程中修改了數(shù)據(jù)XXX,在未提交前,事務(wù)A讀取了XXX,而事務(wù)B卻回滾了,這樣事務(wù)A就形成了臟讀。

不可重復(fù)讀:事務(wù)A首先讀取了一條數(shù)據(jù)后,繼續(xù)執(zhí)行其他邏輯操作,而這時事務(wù)B將這條數(shù)據(jù)內(nèi)容改變了,然后事務(wù)A再次讀取的時候,發(fā)現(xiàn)前后兩次讀取到的數(shù)據(jù)不匹配了,就是所謂的不可重復(fù)讀了。

幻讀:事務(wù)A首先根據(jù)條件得到N條數(shù)據(jù)后,事務(wù)B的邏輯操作增加/減少了部分記錄(增減的記錄恰好符合事務(wù)A之前的查詢條件),導(dǎo)致事務(wù)A再次搜索發(fā)現(xiàn)有M條數(shù)據(jù)了(M!=N),兩次查詢結(jié)果的記錄條數(shù)對不上了,就產(chǎn)生了幻讀。

不可重復(fù)讀?和?幻讀的區(qū)別主要是,一個影響的是記錄內(nèi)容(update操作),一個影響的是記錄條數(shù)(delete/insert操作)。

最后編輯于
?著作權(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)容