2010-08-12 38 views

回答

39

問問自己以下問題:如果有人在您的交易正在運行時將新行插入到您的數據中,會不會很糟糕?這是否會以不可接受的方式干擾您的結果?如果是這樣,請使用SERIALIZABLE級別。

MSDN regarding SET TRANSACTION ISOLATION LEVEL

SERIALIZABLE

地點的範圍內鎖定的數據集, 防止其他用戶更新 或將行插入到數據集 直到交易完成。 這是最嚴格的 四個隔離級別。由於 併發性較低,因此僅在必要時才使用此選項 。該選項具有 與在 事務中的所有SELECT語句中的所有表 上設置HOLDLOCK的效果相同。

因此,您的交易會在其整個生命週期內保持所有鎖定 - 即使是在使用後通常會丟棄的鎖定。這使得看起來所有的交易都是一次運行一個,因此名稱爲SERIALIZABLE。從Wikipedia regarding isolation levels注:

SERIALIZABLE

此隔離級別指定 所有交易發生在一個完全孤立 時尚;即彷彿系統中的所有 交易已經連續執行 ,其中一個在 之後。只有在可以維持系列 執行的錯覺時,DBMS纔可以在同一時間執行兩個或多個事務 。

+0

一個好的,相關參考:(序列化VS快照隔離)http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx – 2013-10-11 21:24:59

+0

這裏是更新後的鏈接[來自MSDN的'SET TRANSACTION ISOLATION LEVEL'](https://msdn.microsoft.com/en-us/library/ms173763.aspx) – 2016-10-20 21:56:17

+0

@AlexYursha謝謝,我更新了這篇文章。 – 2016-10-21 12:54:51

3

嘗試會計。如果您想擁有適當的賬戶價值並遵守信用額度等事項,賬戶中的交易本質上是可序列化的。

相關問題