2013-08-24 100 views
0

我對這個主題很陌生,我試圖驗證我的理解。所以請考慮以下示例: -瞭解事務隔離級別

事務包含select和update語句,其中up​​date語句取決於從select語句返回的結果集。用戶A和B同時執行交易,兩個用戶都選擇了數據並且即將執行更新。如果用戶A首先執行更新,用戶B可能會有一個錯誤;因爲它沒有最新的結果集。這被稱爲Phantom Read案例。

對於可序列化的隔離級別:上述情況將不會發生。事務是完全隔離的,不能併發工作。在用戶A完成其交易之前,用戶B的交易不能執行選擇語句。用戶B將等待直至交易A完成。

對於可重複讀取隔離級別:事務B可以讀取但不能對數據進行修改。這可能導致幻影讀取。

你能說這是否是正確的理解?

回答

0

sql server中的默認鎖定方案將防止查詢返回無效數據。發出命令時,它將等待阻塞命令或超時後返回一個死鎖錯誤。受害者最容易回滾,通常會讀取。這可以防止髒數據。您可能需要查看鎖定提示以及繞過默認行爲的各種方法。

如果您不關心發佈命令時發生了什麼,那麼對於只讀命令使用NOLOCK會導致OLTP系統更好的性能。