2016-01-24 37 views
1

假設我們有一個博客工具,每當用戶對文章(Id,正文,修訂版)執行修改時,修訂計數器就會增加1。如果我們要執行以下查詢(在MS SQL中),並且假設我們有很多人試圖更新文章,那麼我們會得到'正確的'修訂MS SQL中的UPDATE命令線程安全(跟蹤修訂版)

由於我使用的是EF,我都表示通過以下方式查詢:

context.Database.ExecuteSqlCommand("UPDATE dbo.Articles SET Revisions = Revisions + 1 WHERE [email protected];", articleId); 

注:我的意思是「正確的」 修訂是什麼,如果我們將有100人更新同時,一旦它們全部完成,修訂版將被設置爲。

回答

3

是的,這是線程安全的。數據庫引擎將在更新期間鎖定記錄,這意味着其他任何線程都必須等待它完成更新。

在此期間,該字段的確會增加1,而不受其他線程的干擾。一旦完成,資源被解鎖,下一個等待的線程將依次鎖定它,並執行相同的操作。

docs解釋的,鎖是獨佔一個:

互斥(X)用於數據修改操作,例如插入,更新或刪除。確保不能同時對同一資源進行多個更新。

和:

互斥鎖
獨佔(X)鎖可以防止併發事務對資源進行訪問。沒有其他事務可以讀取或修改使用獨佔(X)鎖定鎖定的數據。

+0

謝謝你的回答! – Artem