小编典典

SQL Server:并发线程可以更新同一行吗?

sql

我有一个具有此UPDATE查询的存储过程:

UPDATE TOP(1) Batch_tbl
SET locked = 1
OUTPUT inserted.batchId INTO #batchId
FROM Batch_tbl 
WHERE locked = 0;

它更新locked = 0的第一行,并将locked设置为1。

如果我有多个线程,那么是否会有2个以上线程更新同一行?这是假设锁定一旦为1,就永远不会重新设置为0。

如果是这样,如何使2个以上的线程始终更新不同的行?


阅读 263

收藏
2021-04-14

共1个答案

小编典典

没有 。当SQL Server要更新一行时,将UPDATE获得一个锁。这与其他锁兼容,例如共享锁(可读取),但与另一个更新锁 兼容。

因此,如果两个并发用户尝试更新同一行,则其中一个将“获胜”并获得UPDATE锁,而另一个用户/事务将不得不等到第一次更新完成。

2021-04-14