事務特性及隔離問題

2021-09-19 05:24:36 字數 1464 閱讀 7326

今天是學習計畫的第三天,今天打算繼續昨天**的事務問題。

所以,今天的學習內容是事務特性及隔離問題。

那事務都具有哪些特性呢?

多個執行緒開啟各自事務運算元據庫中的資料時,資料庫系統要負責隔離操作,以保證各個執行緒在獲取資料時的準確性。如果不考慮隔離,可能會引發如下問題。

髒讀指乙個事務讀取了另外乙個事務未提交的資料。

這是非常危險的。舉個例子:假設a向b轉賬100元,對應的sql語句如下

update account set money = money -

100where name =

'a';

update account set money = money +

100where name =

'b';

當第一條sql語句執行完,第二條還沒執行(a未提交時),如果此時b查詢自己的賬戶,就會發現自己多了100元錢,如果a等b走後再回滾,b就會以為轉賬成功了,但是錢又返還給了a,從而導致b損失100元

髒讀被認為是資料庫中的最重要問題,是不被任何資料庫所允許的。

不可重複讀

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

舉個例子:例如銀行想查詢a帳戶餘額,第一次查詢a帳戶為200元,此時a向帳戶存了100元並提交了,銀行接著又進行了一次查詢,此時a帳戶為300元了。銀行兩次查詢不一致,可能就會很困惑,不知道哪次查詢是準的。

和髒讀的區別是,髒讀是讀取前一事務未提交的髒資料,不可重複讀是重新讀取了前一事務已提交的資料。

很多人認為這種情況就對了,無須困惑,當然是後面的為準。我們可以考慮這樣一種情況,比如銀行程式需要將查詢結果分別輸出到電腦螢幕和寫到檔案中,結果在乙個事務中針對輸出的目的地,進行的兩次查詢不一致,導致檔案和螢幕中的結果不一致,銀行工作人員就不知道以哪個為準了。

不可重複讀在有些資料庫被認為是沒有問題的,所以它在某些資料庫中允許出現。

虛度(幻讀)

是指在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。

舉個例子:假如丙存款100元未提交,這時銀行做報表統計account表中所有使用者的總額為500元,然後丙提交了,這時銀行再統計發現帳戶為600元了,造成虛讀同樣會使銀行不知所措,到底以哪個為準。

會發現,虛讀和不可重複讀是十分相似的,以致於很多人很難分辨它們,你只需要知道,它們最大的區別是:不可重複讀讀取到的是更新(update)資料,而虛讀讀取到的是插入(insert)資料。

同樣,虛讀在有些資料庫也被認為不是問題,允許該現象出現。

說完了引發的問題後,我們引出今天的主角,事務隔離級別。

資料庫共定義了四種隔離級別:

在oracle資料庫中,預設隔離級別是read committed

在mysql資料庫中,預設隔離級別是repeatable read

由此可以發現,基本所有的資料庫都不會把隔離級別設定成最高,也不會設定成最低。

因為安全級別越高,處理效率就越低,但是安全級別越低,危害就越大。

事務相關問題 特性 讀問題 隔離級別

事務的特性 事務有四大特性 原子性 強調事務的不可分割.一致性 事務的執行的前後,資料的完整性保持一致.隔離性 乙個事務在執行的過程中,不應該受到其他事務的干擾.永續性 事務一旦結束,資料就持久到資料庫中.如果不考慮事務的隔離性 引發一些安全性問題 兩類問題 讀問題 三類 髒讀 乙個事務讀到了另乙個...

事務(ACID特性,讀問題,隔離級別)

三 隔離級別 事務是指一組最小的邏輯操作單元,裡面有多個操作組成。組成事務的每一部分必須要同時提交成功,如果有乙個操作失敗,整個操作回滾。原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。事務必須使用資料庫從乙個一致性狀態變換到另外乙個一致性狀態。事務的隔離性是多個使用者...

資料庫事務特性及隔離級別

1.原子性 atomicity 2.一致性 consistency 3.隔離性 durability 4.永續性在高併發情況下,要完成保證事務acid特性是十分困難的,除非把所有的事務序列化執行,但是因此造成的影響將是系統效能大大降低。在實際開發中很多業務對事務的要求是不一樣的,因此資料庫設計了四種...