事物的隔離級別

2021-07-25 23:40:04 字數 1428 閱讀 1355

1、髒讀

--最嚴重,杜絕發生

2、不可重複讀

3、幻讀(虛讀)

假設a向b轉賬100元,對應的sql語句如下:

開啟事務

update account set money=money-100where name='a';

update account set money=money+100where nam='b';

兩條sql語句執行完,b查詢自己的賬戶多了100元。

b走後,a將事務進行回滾,這樣b就損失了100元。

乙個事務讀取了另乙個事務沒有提交的資料,非常嚴重。應當盡量避免髒讀。

l  例如: 銀行想查詢a賬戶的餘額,第一次查詢的結果是200元,a向賬戶中又存了100元。此時,銀行再次查詢的結果變成了300元。兩次查詢的結果不一致,銀行就會很困惑,以哪次為準。

l 和髒讀不同的是:髒讀讀取的是前一事務未提交的資料,不可重複度

讀取的是前一事務已提交的事務。

l  很多人認為這有啥好困惑的,肯定是以後面的結果為準了。我們需要考慮這樣一種情況,查詢a賬戶的餘額,乙個列印到控制台,乙個輸出到硬碟上,同乙個事務中只是順序不同,兩次查詢結果不一致,到底以哪個為準,你會不會困惑呢?

當前事務查詢a賬戶的餘額為100元,另外乙個事務更新餘額為

300元並提交,導致當前事務使用同一查詢結果卻變成了300元。

l  指在乙個事務中讀取 另乙個事務 插入或刪除資料記錄,導致當前事務 讀取資料前後不一致。

l  丙存款100元但未提交,這時銀行做報表統計總額為500元,丙將事務提交,銀行再統計就變成了 600元,兩次統計結果不一致,銀行便會不知所措。

乙個事務 讀取 另乙個事務已經提交的資料,強調的是 記錄數 的變化,常有sql型別為 insert和 delete。

虛讀和不可重複讀的區別:

虛讀 強調的是資料表記錄數 的變化,主要是 insert 和 delete 語句。

不可重複讀 強調的是資料表內容 的變化,主要是 update 語句。

serializable(序列化):可避免髒讀、不可重複讀、虛讀情況的發生。

repeatable read(可重複讀):可避免 髒讀、不可重複讀, 不可避免 虛讀。mysql採用可重複讀。

read committed(讀已提交):可避免髒讀,不可避免 不可重複讀、虛讀。oracle採用讀已提交。

read uncommitted(讀未提交):不可避免髒讀、不可重複讀、虛讀。

事物隔離級別

自然也是支援四種事務隔離級別的 read uncommitted,read commit,repeatable read serializable,下面就分別最四種隔離級別在實現的鎖機制做乙個簡介 serializable 1 這種隔離級別對資料的要求最為嚴格,自然也是效能最差的一種隔離級別。在所有...

事物隔離級別

隔離級別從松到緊 讀未提交,讀提交 重複讀,序列化。讀未提交 可能會出現髒讀的情況 例子 你去買5個包子。人多。店員拿的急多方乙個,袋子裡有6個,這個時候,你眼睛一瞟。心裡美滋滋。付錢的時候老闆檢查了一下,發現多了乙個,就拿走了乙個,然後你付錢走人 提交事務 這時候你就發現實際上袋子裡只有5個,但是...

事物隔離級別

在分布式的系統中,通常會有多個執行緒連線到資料庫中同時對乙個表進行操作 這裡的同時並不表示同乙個時間點,而是同時競爭cpu的資源,至於如何排程,就要看執行緒和作業系統如何進行排程了 這種情況下如果會話的事物設定不當,就會導致資料混亂,常常會出現以下三種情況 假設現在系統中有兩個會話a和b,同時對錶t...