我可以使用`WITH(NOLOCK)`来防止死锁吗?

SHR*_*SHR 1 sql-server deadlock nolock

我只有一张桌子InsertDelete而且Select(没有Update

在插入时,有时使用会话锁 ( WITH (TABLOCKX))

我有一个使用 ADO 的程序,它Select从表中使用RecordSet::Open命令打开一个简单的顺序查询。

喜欢:

Select * from t1 where id >= @from_id And >= @to_id`  
Run Code Online (Sandbox Code Playgroud)

或者:

Select top(10) * from t1 where id >= @id Order by id 
Run Code Online (Sandbox Code Playgroud)

id 列是一Identity列。

当我打开查询时,有时会陷入僵局。(表被Insert查询锁定,id 列的索引被 锁定Select

我正在努力防止僵局。

我应该打开选择查询WITH(NOLOCK)吗?它可以防止死锁吗?

小智 5

一个更好的主意是启用快照隔离:https : //docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

这将使每个事务都有自己的数据快照,并且不会锁定或阻止其他事务。