爲了防止出現併發錯誤,我決定將所有的sql調用(這些都是在存儲過程中)sql語句(所有的crud操作,比如update/insert/upserts,甚至只是表格讀取)是否在ISOLATION LEVEL SERIALIZABLE中包裝所有的sql調用?刪除所有併發問題?
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
開始TRAN--sqlstatements here
OPTION(MAXDOP 1)
COMMIT TRAN
讓我們說我不關心表現。我只想防止由兩個或更多併發線程訪問相同數據庫引起的約束違規和死鎖。
這是否有效地消除所有死鎖以及競爭條件引起的約束問題?
如果我已經將調用包裝在可序列化事務中,是否還需要爲CUD函數顯式使用(保持鎖定,更新鎖定)?
假設數據庫中存在多個對象,仍然可能存在死鎖。 –
嘗試[this](http://nexussharp.wordpress.com/2012/01/30/deadlock-heaven-serializable-isolationlevel/)並親自查看。 – OzrenTkalcecKrznaric