我目前正在處理交易和變得困惑。這些事務是在數據訪問層創建的,而不是在數據庫的存儲過程中創建的(SQL Server 2008)。 我瞭解爲交易設置的隔離級別的正常工作。 我無法理解在以下情況下會發生什麼情況。交易和鎖
- 發起交易
- 與ID = 1選擇的僱員。
- 更新ID = 1的員工。
- 提交
有多個線程在做同樣的事情,但不同的ID。但可能會出現兩個線程查找相同ID的情況。讓我們稱它們爲線程A和B.上述步驟按照以下兩種線程的方式進行。隔離級別設置爲可重複讀取。
A1。開始交易 A2。選擇ID = 1的員工。 B1。開始交易 B2。選擇ID = 1的員工。 A3。更新ID = 1的員工。 A4。提交 B3。更新ID = 1的員工。 B4。提交
我真正想從事務中實現的是,當線程A選擇特定記錄時,線程B甚至不應該能夠選擇該記錄。我不知道我是否通過使用事務和鎖來解決這個問題。
等待答覆:)
一般來說,線程B在線程A之後立即更新記錄是否可以?即線程A所做的更改將會丟失。如果這不適合你,那麼你應該研究樂觀的併發控制。 – Alexander
線程B更新記錄並不正確。我甚至想阻止A在交易中被A選中時被選中。 – Sharkz