SqlServer查詢語句中用到的鎖

2022-02-10 15:25:41 字數 1122 閱讀 3606

前段時間**公司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

top10

*from

with

(nolock)

select

top10

*from

with

(holdlock

)select

top10

*from

with

(xlock)

select

top10

*from

with

(updlock)

update

with

(holdlock

set=

'wokofo

'update

with

set=

'wokofo

'update

with

set=

'wokofo

'

mysql查詢語句中使用者變數的使用

先上 吧 select notice id notice fid notice has read notice notice time notice read time f fnum f forg f fdst f actual parking as parking f scheduled dept...

mysql語句中用if的例子

引用 http zxlm.cityk.cn fh viewthread.php?tid 1395 select if sva 1,男 女 as ssva from taname where sva 12.2.控制流程函式 case value when compare value then resu...

mysql語句中用if的例子

select if sva 1,男 女 as ssva from taname where sva 12.2.控制流程函式 case value when compare value then result when compare value then result else result end...