程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> Sql Server查詢語句中用到的鎖

Sql Server查詢語句中用到的鎖

編輯:關於SqlServer

前段時間**公司DBA來我們這培訓。講了一大堆MySQL的優化。 QA環節一程序員問

“SQL語句中的 with nolock 除了不鎖表外 是否能讀其他鎖住的數據"

講課的人嘟嘟了半天沒解釋清楚(有可能是MySQL裡沒有這個機制),公司的另一程序員給出了一個很簡潔明了的回答

WITH NOLOCK 除了本身不鎖表(不加任何鎖) 也不會受其他的已存在的鎖影響,鎖住的行數據也照樣讀

個人認為這句話說得很清楚明了,一句話就能說明白的事

不過好奇怪的是程序員經常用這個語句竟然也不去試一下

這裡順便總結一下 其他的 SQLSERVER 中的 with鎖級別

WITH NOLOCK:無鎖

WITH HOLDLOCK:掛一個保持鎖

WITH UPDLOCK:掛一個更新鎖

WITH XLOCK:掛一個排他鎖

需要注意的是 with nolock 是不能用於update,delete insert 這種更新語句的,說繞了。簡單的說 with nolock 只能用於select

例如:update dbo.test with(NOLOCK) set username='wokofo' --這樣的語句是錯誤的

彈回:INSERT、UPDATE、DELETE 或 MERGE 語句的目標表不允許使用 NOLOCK 和 READUNCOMMITTED 鎖提示。

實際使用:

select top 10 * from dbo.test with(NOLOCK)
select top 10 * from dbo.test with(HOLDLOCK)
select top 10 * from dbo.test with(XLOCK)
select top 10 * from dbo.test with(UPDLOCK)


update dbo.test with(HOLDLOCK) set username='wokofo'
update dbo.test with(XLOCK) set username='wokofo'
update dbo.test with(UPDLOCK) set username='wokofo'
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved