原來事務隔離級別可以這樣理解

2021-09-10 09:36:30 字數 2144 閱讀 2238

3. 併發的問題

4. 隔離級別

5. 總結

一系列資料庫操作的集合,主要就是 curd

乙個有規矩的團體,一起行走

事務像原子一樣不可分割

要麼全部成功,不會出現只有部分操作成功

要麼全部失敗,進行回滾,回到最初的狀態,好像什麼也沒發生過

操作們要同生共死

事務:小白給小黑轉賬

事務使資料庫從乙個一致性的狀態轉換到另乙個一致性的狀態

有點像物理學的質量守恆和能量守恆

佛系處事,雲卷雲舒,花開花落,大千世界不會因為我而改變

事務:小白和小黑轉賬

多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾

多個併發事務之間要相互隔離

併發發生後,事務是可以同時訪問同一行資料的

事務又是孤僻的,我過我的獨木橋,你走你的陽關道

三個人轉賬:

事務一旦移交,對資料的改變是永久性的

發生故障不應該有任何影響

做了什麼就是什麼,已經刻入我的人生,無法逆轉

事務:小白給小黑轉賬

事務應該是互不來往,大家各走各路

現實情況是總有資源是交錯的

比如兩個事務一起執行時,同時又有對同一行資料由讀寫操作

難以避免的衝突發生了

會有四種形式出現

乙個事務把另乙個事務的更新覆蓋

小白和小黑給小紅轉賬

乙個事務讀取了另乙個事務未提交的資料

資料還沒提交,允許其他事務讀取

未提交的事務回滾會發生異常

小白和小黑給小紅轉賬

乙個事務讀取表中某一行資料,多次讀取的結果不同

因為在讀的時候,還允許其他事務修改資料

小紅在查自己賬戶,小白的轉賬

如果以最後讀到的資料為準,也有個隱患,也就是事務1發生回滾,那麼這個資料也是錯的

乙個事務讀取了別的事務插入的資料,導致前後讀取不一致

發生在事務讀取乙個指定範圍內的資料

事務讀取的期間,剛好有其他事務進行插入資料的操作,而且這個操作的值剛好就發生在這個指定範圍內

那麼就像幻覺一樣,見鬼了,兩次讀取的資料不一致

小黃在查金額為 100 的賬戶

針對事務併發出現的幾種問題,衍生出 4 種程度不一的隔離級別

對一行資料的操作,總體上可以認為是兩種

既然對同一行的資料的讀寫,會發生爭端,那麼就來立幾個規矩

乙個事務對一行資料的修改過程中

最低級別的隔離

只解決了更新丟失的問題,髒讀、不可重複讀、幻讀均會發生

乙個事務對一行資料的操作:

因為修改操作,其他事務無法訪問,就沒有了讀取未提交資料產生髒資料的情況發生

但是讀取操作,其他事務可能會修改該行,所以會發生不可重複讀問題,比如幾次讀取資料都不一樣

幻讀和插入新資料有關,也沒有解決

乙個事務對一行資料的操作:

可以看到在讀已提交的隔離級別上又進了一步,

修改資料和讀已提交是一樣的,所以不會有髒資料

讀取操作,禁止其他事務進行修改,也就不會出現多次讀取不一樣的資料,不可重複讀解決了

perfect!

但是插入新行呢,幻讀還是有的

幻讀問題和讀寫一行資料無關,和插入新資料有關,所以一些儲存引擎採取了其他方式來避免幻讀問題

比如 innodb 和 falcon 儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)機制解決該問題

所有事務序列執行

因為沒有了對同一行資料的同時操作

所以髒讀、不可重複讀不會發生

又連插入資料的事務也跟著排隊,幻讀同樣不會發生

效率太低了

這四種隔離級別可以用一張**來表示:

髒讀不可重複讀

幻讀未提交讀(read uncommitted)√√

√已提交讀(read committed)×√

√可重複讀(repeatable read)××

√可序列化(serializable)××

×大部分資料庫使用 read committed 的隔離級別

mysql 預設使用 repectable read 隔離級別

原來「事務0丟失」是這樣做到的

隨著資料上雲程序的加快,越來越多企業願意把雲下資料庫搬到雲上,同時對雲上資料庫的要求也越來越高。尤其是資料的完整可靠,承載著企業業務持續發展的使命,其重要性不言而喻。而企業在雲上使用過程中,事務經常面臨丟失的風險,可靠性和完整性得不到滿足,很大程度上影響了企業的業務發展。針對這個問題,華為雲資料庫m...

理解MySQL InnoDB事務隔離級別

本文為翻譯的文章,作者ovais.tariq,原文 隔離性是acid性質中很重要的部分,它保證事務以一種可靠的方式進行處理。隔離性確保同時執行的事務不會相互干擾。隔離性保證資料的一致性。如果事務沒有被隔離,那麼某個事務可能會修改其它事務正在讀取的資料,因而產生了資料的不一致。既然我們理解了隔離性是什...

事務隔離級別的理解

資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committed repeatable read serializable 而且,在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。下面通過事例一一闡述它們的概念與聯絡。read uncommitted 讀未提...