Rdbms

為什麼一個事務多次檢索同一行?

  • February 14, 2017

我知道當事務 t1 檢索一行時發生不可重複讀取問題,事務 t2 然後更新該行,事務 t1 然後再次檢索同一行。T1 檢索到同一行,但看到兩個不同的值。我想知道為什麼事務再次讀取同一行。為什麼它不使用舊值?如果它再次檢索以獲取更新的值,那麼獲取不同的值應該不是問題。你能解釋一下嗎?什麼時候應該使用可重複讀隔離級別?

我想知道為什麼事務再次讀取同一行。為什麼它不使用舊值?如果它再次檢索以獲取更新的值,那麼獲取不同的值應該不是問題。

我的猜測是,開發人員根本沒有考慮並發更新的可能性以及與之相關的複雜性。

什麼時候應該使用可重複讀隔離級別?

假設 T1 是一個顯式事務(即它具有 Begin Tran、Commit Tran),我相信在可重複讀取隔離級別下執行 T1 可以保護您免受這個特定問題的影響。但是,它可能會導致不必要的阻塞或死鎖。

如果一個有問題的行是唯一可能的問題,那麼使用 WITH (UPDLOCK) 提示只選擇一次就足夠了,這將阻止其他事務修改它,直到 T1 完成。然而,其他事務仍然能夠讀取該行(然後可能由 T1 更新),除非它們也使用 WITH (UPDLOCK)。

引用自:https://dba.stackexchange.com/questions/164136