2008-08-21 40 views
6

我爲什麼應該或不應該我用髒讀:SQL服務器 - 髒讀優點和缺點

set transaction isolation level read uncommitted 

在SQL Server?

+2

詳細分析此處: [選擇READ COMMITTED和REPEATABLE READ可能會返回不正確的結果](http://www2.sqlblog.com/blogs/alexander_kuznetsov/archive/2009/04/10/selects-under-read-承諾和可重複的讀取-MAY-返回不正確-results.aspx)在這裏: [歪斜彩民的情況下](http://www.simple-talk.com/sql/t-sql-programming /的情況下的最偏斜,合計/) – 2009-07-03 20:44:41

回答

14

被引進MSDN快照隔離:

當這個選項被設置,就可以讀取未提交的或髒數據;數據中的值可以更改,行可以在事務結束之前出現或消失在數據集中。

簡而言之,當你使用這種隔離級別,而你正在活動的表作爲一個事務的一部分執行多個查詢,但不保證該信息交易的不同部分內返回你會保持不變。你可以在一個事務內兩次查詢相同的數據,並得到不同的結果(這可能在一個不同的用戶在您的交易之中更新同一數據的情況發生)。這顯然會對依賴數據完整性的應用程序部分產生嚴重影響。

6

通常當你需要做相當大的(或經常)查詢忙表,其中承諾讀取可能會因鎖被阻止來自未提交的事務,但只有當你可以用不準確的數據生活。

作爲一個例子,在我最近開發的遊戲網站上有一些關於近期遊戲的統計數據的總結性顯示,這些統計數據都基於髒讀,對於我們來說包括然後排除事務數據尚未提交(我們反正很少,如果有的話,交易將回退知道),我們認爲平均數據會更準確的方式。

0

使用它,如果你想要把數據傳回正確的路程,如果它是正確的
如果你用它

做更新不若如果數據是非常重要的是正確的使用或它不是那麼重要也看看已經在SQL Server 2005中

-1

的事情是當你想提交,我們可以設置事務隔離級別的幫助下讀取未提交之前做讀取數據,該數據可能或可能不會改變。

我們可以通過查詢讀取數據:

Select * from table_name with(nolock) 

這僅適用於讀取未提交的隔離級別。

+0

請小心,當你鏈接到第三方網站,因爲這將是一個堆棧溢出的垃圾郵件。相關:[如何不成爲垃圾郵件發送者](http://stackoverflow.com/help/promotion)。 – 2015-12-27 06:11:23