併發事務帶來哪些問題

2021-09-26 10:04:33 字數 825 閱讀 8899

在典型的應用程式中,多個事務併發執行,經常會操作相同的資料來完成各自的任務(多個使用者對統一資料進行操作)。併發雖然是必須的,但可能會導致以下的問題。

髒讀(dirty read): 當乙個事務正在訪問資料並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時另外乙個事務也訪問了這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,那麼另外乙個事務讀到的這個資料是「髒資料」,依據「髒資料」所做的操作可能是不正確的。

丟失修改(lost to modify): 指在乙個事務讀取乙個資料時,另外乙個事務也訪問了該資料,那麼在第乙個事務中修改了這個資料後,第二個事務也修改了這個資料。這樣第乙個事務內的修改結果就被丟失,因此稱為丟失修改。 例如:事務1讀取某錶中的資料a=20,事務2也讀取a=20,事務1修改a=a-1,事務2也修改a=a-1,最終結果a=19,事務1的修改被丟失。

不可重複讀(unrepeatableread): 指在乙個事務內多次讀同一資料。在這個事務還沒有結束時,另乙個事務也訪問該資料。那麼,在第乙個事務中的兩次讀資料之間,由於第二個事務的修改導致第乙個事務兩次讀取的資料可能不太一樣。這就發生了在乙個事務內兩次讀到的資料是不一樣的情況,因此稱為不可重複讀。

幻讀(phantom read): 幻讀與不可重複讀類似。它發生在乙個事務(t1)讀取了幾行資料,接著另乙個併發事務(t2)插入了一些資料時。在隨後的查詢中,第乙個事務(t1)就會發現多了一些原本不存在的記錄,就好像發生了幻覺一樣,所以稱為幻讀。

不可重複度和幻讀區別:

不可重複讀的重點是修改比如多次讀取一條記錄發現其中某些列的值被修改,幻讀的重點在於新增或者刪除比如多次讀取一條記錄發現記錄增多或減少了。

——作者 snailclimb

併發事務帶來哪些問題

隔離級別 髒讀 不可重複讀 幻影讀 在典型的應用程式中,多個事務併發執行,經常會操作相同的資料來完成各自的任務 多個使用者對同一資料進行操作 併發雖然是必須的,但可能會導致以下的問題。髒讀 dirty read 當乙個事務正在訪問資料並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時另外乙個...

併發事務帶來哪些問題?

多個事務併發執行,經常會通過操作相同的資料來完成各自的任務 多個使用者對同一資料進行操作 併發雖然是必須的,但是會導致以下的問題。1.髒讀 當乙個事務正在訪問資料並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時另乙個事務也訪問了這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,...

事務併發處理帶來的問題

丟失更新 兩個人 甲和乙 同時讀取乙個資料,甲修改完資料並寫回資料庫。接著乙也修改資料並寫回資料庫。導致甲的修改被覆蓋 讀髒資料 甲修改了資料,乙讀取甲修改後的資料,但由於某種原因甲撤銷事務。導致乙讀取的資料不正確 不可重複讀 事務1讀取資料後,事務2執行更新操作,使事務1無法再現前一次讀取結果。或...