資料庫事務中的髒讀是什麼?


當許多事務同時執行時,我們稱它們為併發事務。併發性是為了提高時間效率。如果許多事務試圖訪問相同的資料,則會出現不一致性。需要併發控制來維護資料的一致性。

為了併發執行事務,我們交錯它們的運算。每個事務都會獲得一部分計算時間。

事務中的問題

這會導致以下問題:

  • 丟失更新問題。(WW 衝突)
  • 髒讀/臨時更新。(WR 衝突)
  • 不可重複讀/分析錯誤問題。(RW 衝突)

所有這些都是因為隔離性被破壞了。

讓我們討論一下髒讀或臨時更新。

髒讀

髒讀是指讀取未提交的資料。如果某一行資料被另一個正在執行的應用程式修改但尚未提交,而我們也執行一個應用程式來讀取同一行資料,並讀取了該未提交的資料,這就是我們所說的髒讀狀態。

主要的一點是,髒讀者必須停止讀取髒資料。

如果在這裡執行某個操作,我們可以嘗試使用共享鎖來阻止其他事務修改該行。

髒讀問題的示例

示例 1

  • 步驟 1 - 考慮一個線上購物系統,使用者可以在同一時間購買和檢視商品。

  • 步驟 2 - 假設使用者試圖購買一件商品,並且一旦使用者購買了該商品,更新庫存中的計數值將立即更改。

  • 步驟 3 - 假設庫存中有 10 件商品,但現在只有 9 件了。

  • 步驟 4 - 此外,由於此事務,還將與計費閘道器進行通訊。

  • 步驟 5 - 同時,如果任何其他使用者也在同一時間進行交易,則新使用者將能夠看到庫存中有 9 件商品。

  • 步驟 6 - 但是,假設第一個使用者由於某些錯誤或資金不足而無法完成他的/她的交易。

  • 步驟 7 - 那麼,在這種情況下,第一個使用者完成的事務將回滾,現在庫存中的值將再次變為 10。

  • 步驟 8 - 但是,當第二個使用者進行交易時,庫存中的商品數量為 9。

  • 步驟 9 - 這稱為髒資料,整個問題稱為髒讀問題。

示例 2

考慮另一個示例

假設 T2 讀取了 T1 對 X 進行的更新值,但 T1 失敗並回滾。因此,T2 讀取了 X 的錯誤值。

T1T2
read(x)
X=X-5
write(x)

read(x)

x=x+5

write(x)
ROLLBACK

commit

更新於: 2021-07-08

11K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告