我知道Serializable的隔離級別是所有隔離級別中限制最嚴格的級別。我很好奇,哪種應用程序需要這種隔離級別,或者我應該考慮使用它?隔離級別 - 可序列化。我應該什麼時候使用這個?
31
A
回答
39
問問自己以下問題:如果有人在您的交易正在運行時將新行插入到您的數據中,會不會很糟糕?這是否會以不可接受的方式干擾您的結果?如果是這樣,請使用SERIALIZABLE級別。
從MSDN regarding SET TRANSACTION ISOLATION LEVEL:
SERIALIZABLE
地點的範圍內鎖定的數據集, 防止其他用戶更新 或將行插入到數據集 直到交易完成。 這是最嚴格的 四個隔離級別。由於 併發性較低,因此僅在必要時才使用此選項 。該選項具有 與在 事務中的所有SELECT語句中的所有表 上設置HOLDLOCK的效果相同。
因此,您的交易會在其整個生命週期內保持所有鎖定 - 即使是在使用後通常會丟棄的鎖定。這使得看起來所有的交易都是一次運行一個,因此名稱爲SERIALIZABLE。從Wikipedia regarding isolation levels注:
SERIALIZABLE
此隔離級別指定 所有交易發生在一個完全孤立 時尚;即彷彿系統中的所有 交易已經連續執行 ,其中一個在 之後。只有在可以維持系列 執行的錯覺時,DBMS纔可以在同一時間執行兩個或多個事務 。
3
嘗試會計。如果您想擁有適當的賬戶價值並遵守信用額度等事項,賬戶中的交易本質上是可序列化的。
相關問題
- 1. 什麼時候應該使用JSON序列化,爲什麼?
- 2. 什麼時候應該使用可可?
- 3. 可序列化的事務隔離級別不適用於我
- 4. 我應該使用哪個隔離級別來預訂航班
- 5. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 6. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 7. NHibernate,我應該使用ReadCommitted還是ReadUncommited事務隔離級別?
- 8. 什麼時候應該使用AWS,什麼時候不使用
- 9. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 10. oracle中的可序列化隔離級別
- 11. 可序列化的隔離級別原子性
- 12. 設置存儲過程中的可序列化隔離級別
- 13. 交易可序列化的隔離級別澄清
- 14. 我們應該使用哪種數據庫隔離級別以及哪種隔離級別最好?
- 15. 什麼時候應該使用一個引用,什麼時候應該使用一個ProjectReference
- 16. mysql隔離級別
- 17. 我們什麼時候應該上課,什麼時候不應該上課
- 18. 什麼時候應該使用Satellite Assemblies進行本地化?什麼時候應該使用資源文件(.resx)?
- 19. Mysql XA隔離級別
- 20. java.sql.Connection隔離級別
- 21. 在C#中,什麼時候應該使用一個結構,什麼時候應該使用一個類?
- 22. 爲什麼序列化隔離級別會導致死鎖和併發問題?
- 23. 什麼時候應該使用datagrid,何時應該使用datagridview?
- 24. 什麼時候應該使用$(object),何時應該使用$ object?
- 25. 什麼是MvcHtmlString,我應該什麼時候使用它?
- 26. 什麼時候應該使用getElementById?
- 27. 什麼時候應該使用_aligned_malloc()?
- 28. 什麼時候應該使用GC.SuppressFinalize()?
- 29. 什麼時候應該使用`use`?
- 30. 什麼時候應該使用didFinishLaunchingWithOptions?
一個好的,相關參考:(序列化VS快照隔離)http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx – 2013-10-11 21:24:59
這裏是更新後的鏈接[來自MSDN的'SET TRANSACTION ISOLATION LEVEL'](https://msdn.microsoft.com/en-us/library/ms173763.aspx) – 2016-10-20 21:56:17
@AlexYursha謝謝,我更新了這篇文章。 – 2016-10-21 12:54:51