大話事務隔離級別

2021-10-25 08:50:35 字數 1372 閱讀 4455

大話事務隔離級別

我,老婆(兩個客戶端)同時操作乙個銀行卡(家庭資料庫中,乙個銀行卡即為一條記錄,記錄了我家銀行卡號和餘額)

起始這個資料庫是read uncommitted級別,現在我想買電腦,我比較喜歡thinkpad,看了一款,準備付款,老闆扣了我銀行卡12000(開啟事務,update),很巧,在家的老婆這時候,突然查詢了我的銀行卡餘額(select),發現我的餘額少了12000,氣急敗壞等我回家(髒讀),然而我這時候又後悔了,我又想買mac了,厚著臉皮找老闆把錢退了(rollback),然後回到家,突然被噼里啪啦一頓罵,沒等我解釋這就是髒讀,乙個鍵盤已經扔在我在面前…

我決定把資料庫的事務級別調整到read committed,這樣的話只有我確定走出店門(commit),老婆才會查詢到扣款記錄,不至於冤枉我。第二天我還要去買mac,我看好了準備付款(開啟事務),一看**14000,我查了下(select),餘額還有15000,剛剛夠,只是有點肝疼,我說付款前再讓我看一眼,很巧,這時候老婆拿銀行卡買了乙個2000的包(update),她買完了(commit),我也下定決心要付款了,結果店員查了下(select),說我餘額不夠,只有13000。我:???我很鬱悶,剛剛卡里明明有錢的?我明白了,這裡又出現了不可重複讀!這會導致我一次事務內查詢出的餘額不一樣

我回去求老婆半天,她才決定向我的銀行卡裡充了1000元,我決定把事務級別調整到repeatable read,第三天我又去買mac,二話不說就是準備付款(開啟事務),在我一旦開始付款(update),直到走出店門(commit),老婆這個期間(開啟事務)所有查詢都是我付款前的餘額,並且不能夠再花一分錢(update),對於老婆來說,這就是可以重複讀了,不會出現她在一次事務中讀取同一條資料不一致的重複讀問題,老婆要想看到這次消費,必須在我走出店門之後(我commit),她再次開啟事務,執行查詢,才能看到這次的餘額變化,終於,我買到了電腦。

最後我想看下總家當還有多少,我開啟事務,粗略看了一下,一共就有1張銀行卡(count),餘額0,誰知,在家的老婆這時候終於決定不再刷我的銀行卡,她決定自己辦一張銀行卡(insert),而我正在剛查完餘額的懷疑人生中,這時候,只見一股神秘力量讓我的手指又按下了查詢鍵,結果,哇,金色傳說,居然出來了兩張卡(count),我懷疑自己是不是出現幻覺了(幻讀)??老婆居然自己辦了銀行卡??

這就是repeatable read,它無法解決幻讀問題,它能鎖定一行資料的修改(update),但是其他人仍然可以隨時執行insert操作!你在乙個事務內仍然讀出來的兩次可能會不一樣,要想避免出現這個,只能採取最高隔離等級,serializable!讀用讀鎖,寫用寫鎖,這樣可以避免以上所有問題,但是哈哈哈,我為啥要這樣做呢。

文章寫完了,老婆呢?qaq

最後歡迎大佬指正

事務隔離級別

1 serializable 最嚴格的spring事務隔離級別,事務序列執行,資源消耗最大 3 read committed 大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了 髒讀取 該級別適用於大多數系統。4 read uncommi...

事務隔離級別

四種隔離級別 隔離級別 髒 讀不可重複讀取 幻 像讀操作未提交 read uncommitted 是是 是讀操作已提交 read committed 否是 是可重複讀 repeatable read 否否 是快照否否 否可序列讀 serializable 否否 否 sql server 還支援使用行...

事務隔離級別

需要防止的現象和事務隔離級別 ansi iso sql 標準 sql92 定義了四種事務隔離級別 transaction isolation level 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...