新四季網

簡述事務的四大特性(事務的四大特性和隔離級別)

2023-05-09 05:14:54 1

0. 說明

前兩天有件事遇到了事務的特性和隔離級別的問題,(什麼事,你懂的)。今天就總結下這兩個內容,主要參考的是《高性能MySQL》這本巨著。

1. 事務的四大特性

事務的四大特性(ACID),顧名思義,就是4個特性,先看下圖:

事務的四大特性

下面我們具體看下在書中四大特性的概念。

1.1 原子性

一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交,要麼全部失敗回滾,對於一個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性。

1.2 一致性

資料庫總是從一個一致性的狀態轉換到另外一個一致性的狀態。在著名的轉帳的例子中,一致性確保了無論中間的那條語句執行時系統崩潰,或者其他原因導致語句執行失敗,支票帳戶中也不會損失,因為事務最終沒有被提交,所以事務中所做的修改也不會被保存在資料庫中。

1.3 隔離性

通常來說,一個事務所做的修改在最終提交以前,對其他事務是不可見的。在著名的轉帳的例子中,當事務沒有提交的時候,轉帳的語句執行了,此時有另外一個帳戶匯總程序開始運行,則其看到的支票帳戶的餘額並沒有改變。後面我們討論隔離級別的時候,會發現為什麼我們要說「通常來說」是不可見的。

1.4 持久性

一旦事務提交,則其所做的修改就會被永遠保存到資料庫中。此時即便是系統崩潰,修改的數據也不會丟失。持久性是個有點模糊的概念,因為實際上持久性也分很多不同的級別。有些持久性策略能夠提供非常強的安全保障,而有些則未必。而且不能有能做到100%的持久性保證的策略(如果資料庫本身就能做到真正的持久性,那麼備份又怎麼能增加持久性呢?)。這個在上面說到的這本巨著中會詳細的討論MySQL中持久性的真正含義。

2. 事務的隔離級別

事務的隔離級別主要是講事務的隔離性。主要是不同事務之間的可見性問題,還是先看下圖:

事務的隔離級別

下面主要看下書中講的事務的四個隔離級別。

2.1 未提交讀

在Read Uncommitted級別,事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的數據,這也被稱為髒讀(Dirty Read)。這個級別會導致很多問題,從性能上來說,Read Uncommitted不會被其他的級別好太多,但卻缺乏其他級別的很多好處,除非真的有非常必要的理由,在實際應用中一般很少使用。

2.2 提交讀

大多數資料庫系統的默認隔離級別是Read Committed(但MySQL不是)。Read Committed滿足前面提到的隔離性的簡單定義:一個事務開始時,只能「看見」已經提交的事務所做的修改。換句話說,一個事務從開始知道提交之前,所做的任何修改對其他事務都是不可見的。這個級別有時候也叫做不可重複讀(nonrepeatable read),因為兩次執行同樣的查詢,可能會得到不一樣的結果。

2.3 可重複讀

Repeatable Read解決了髒讀的問題。該級別保證了在同一個事務中多次讀取同樣記錄的結果是一致的。但是理論上,可重複讀隔離級別還是無法解決另外一個幻讀(Phantom Read)的問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外一個事務又在該範圍內插入新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行(Phantom Row)。InnoDB和XtraDB存儲引擎通過多版本並發控制(MVCC,Multiversion Concurrency Control)解決了幻讀的問題。**可重複讀是MySQL的默認事務隔離級別**。

2.4 可串行化

Serializable是最高的隔離級別。它通過強制事務串行執行,避免了前面說的幻讀的問題。簡單來說,Serializable會在讀取的每一行數據上都加鎖,所以可能導致大量的超時和鎖爭用的問題。實際應用中也很少用到這個隔離級別,只有在非常需要確保數據的一致性而且可以接受沒有並發的情況下,才考慮採用該級別。

3. 總結

對於事務的四大特性,沒什麼說的,就是一些保證數據一致性的特點。這些特點也會適用於現在流行的分布式系統中的分布式事務中。事務的隔離級別是一個比較難懂的問題,因為可能會導致髒讀,幻讀,不可重複讀,或者性能為題,這個我們後面有機會再出文章解釋,需要的可以先關注下本公眾號。希望本文能對各位看客理解資料庫事務有所幫助。

評論、點讚、關注 轉發。

限於筆者知識有限,如果不足之處請幫忙指正,不喜勿噴!

您的支持是我不懈努力的動力,請讀者多支持下!

更多文章,請關注微信公眾號 CS_Toper之路,或者頭條號 CSToper。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了