事物之隔離性詳解

2021-07-26 17:01:27 字數 890 閱讀 9216

概念:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的失去,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。

多個執行緒開啟各自事務運算元據庫中資料時,資料庫系統要負責隔離操作,以保證各個執行緒在獲取資料時的準確性。

如果不考慮隔離性,可能會引發如下問題:

1、髒讀:是指乙個事務讀取了另乙個事務沒有提交的資料。

假如a和b各自有100元錢,a向b轉了100元錢,執行update account set money=money+100 while name=『b』;update account set money=money-100 while name=『a』;當第一條執行完,第二條還沒執行,b查詢自己的賬戶,就會發現自己的賬戶多了100元,如果此時a再回滾自己的操作,那麼b之後再查詢自己的賬戶,就會發現自己的錢和之前並沒有變化,還是100

2、不可重複讀

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

還是上面那個例子,轉賬之前,銀行查詢a的賬戶是100元錢,a向b轉了100之後,銀行 對應上面兩個sql語句並且已經提交,又查詢a賬戶,發現是0元。這就導致了兩次查詢結果不相同。

注意:不可重複讀有時候是正確的,就像這種情況,正是實際情況需要的,然而有時,不可重複讀是不正確的,比如對某個地區統計gdp,兩次查詢結果不一樣,該怎麼報道呢?所以這種情況又是錯誤的。

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

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

假如乙個人存款100元沒有提交,這時銀行做報表統計所有使用者的總額為600元,然後這個人提交了這時銀行再統計發現賬戶為700元了,這就是虛讀。

說了問題,那麼怎麼避免這些問題呢?請看我另一篇部落格

3 事物的隔離性

不可重複度和幻讀區別 不可重複讀的重點是修改,幻讀的重點在於新增或者刪除。sql 標準定義了四個隔離級別 隔離級別 髒讀 不可重複讀 幻影讀 read uncommitted read committed repeatable read serializable mysql innodb 儲存引擎的...

事物及事物隔離級別

什麼是事物 事物是訪問資料庫的乙個操作序列,資料庫應用系統通過事物集來完成對資料庫的訪問。事物的正確執行使得資料庫從一種狀態轉換為另一種狀態。事物必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 du...

事物隔離級別

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