我需要经常执行此SQL
UPDATE Users SET UserPoint=UserPoint+(@UserPoint) WHERE UserID=@UserID
我可以允许脏读或脏写但我不想看到死锁,有没有办法最大限度地避免死锁?
修改
好的,@ Tomomome这可能不是一个僵局,这对我来说是个好消息。
我在这里跟进一个新问题,希望你能提供帮助。
我还需要读取数据,所以我使用
SELECT UserPoint FROM [Users] WITH (NOLOCK) WHERE UserID=@UserID
这不是一个事务,只是一个简单的单行SQL,我已经使用nolock
,如果我允许脏读,我是否需要使用SET TRANSACTION ISOLATION LEVEL
来避免死锁。
EIDT AGAIN
我认为SET ISOLATION LEVEL无法阅读并且与NOLOCK相同。完成了。 谢谢大家,
答案 0 :(得分:3)
有没有办法最大限度地避免陷入僵局?
不,因为这句话不能死锁。
死锁需要两个锁定(a和b)作为最小值。因此,一个进程获得锁A,等待B,另一个进程获得B,等待A - 等待没有任何东西可以解决。如果上述语句遇到锁定,它将等待(并可能超时),但不会死锁。
除非它是包含更多陈述的大型交易的一部分。
因此,问题不存在;)