【发布时间】:2018-08-01 19:32:15
【问题描述】:
在我的 Javascript 代码中,我调用 3 simultaneos WebMethods。
网络方法 1
UPDATE MyTable
SET ColA = 'Val1'
WHERE Condition1 = 'X'
AND Condition2 = 'Y'
WebMethod 2
UPDATE MyTable
SET ColB = 'Val2'
WHERE Condition1 = 'X'
AND Condition2 = 'Y'
WebMethod 3
UPDATE MyTable
SET ColC = 'Val3'
WHERE Condition1 = 'X'
AND Condition2 = 'Y'
我的表
正如预期的那样,即使我在更新语句中使用WITH (ROWLOCK),我也会遇到死锁
如何告诉 SqlServer 锁定行但允许读取其他更新。
因为死锁在以下情况下消失:
UPDATE MyTable
SET ColA = 'Val1'
WHERE ID IN
(
SELECT ID
FROM MyTable WITH(READUNCOMMITTED)
WHERE Condition1 = 'X'
AND Condition2 = 'Y'
)
【问题讨论】:
-
有人可能会问为什么要调用 3 个方法来同时更新同一行的不同列。似乎单个更新会更有意义。或者这只是现实世界锁定的一个例子?
-
这只是一个例子,因为在现实世界中,我有多个用户更新同一列,而不是相同的 javascript。
标签: sql-server database-deadlocks