“交易在锁定资源上陷入僵局......”在简单的交易中发生了

时间:2017-04-21 13:42:07

标签: sql-server transactions

在非常罕见的情况下,我在我的Delphi程序中遇到了一个异常,它显示了SQL Server 2012的以下问题:

  

事务(进程ID xxx)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行   交易

read about deadlocks我认为我确实了解在哪种情况下会出现死锁。

失败的交易看起来像这样:

BEGIN TRANSACTION
SELECT currentVal FROM numbers where ID = ...
UPDATE numbers SET currentVal = currentVal + 1 where ID = ...  // <-- Exception here
COMMIT

我的应用程序的堆栈跟踪显示错误发生在UPDATE语句中,而不是在COMMIT期间。

我不明白这个事务如何导致死锁。 UPDATE可以强制其他事务等待,但只是短时间,因为UPDATE子句将正常结束,而事务不必等待正在等待的另一个事务。

触发器不存在。

是否有人提示在此次交易中发生了什么?如果有什么我可以改进的话?

0 个答案:

没有答案