如果出现死锁异常,我可以重试每个 SQL 查询吗 (MSSQL)

1 sql-server deadlock query update

在发生死锁异常时重试 SQL 查询是否总是安全的?这会导致意外行为或执行操作两次吗?我认为死锁异常总是意味着回滚,即使查询不在显式定义的事务中运行。

Gra*_*hey 5

是的。

但要明白,死锁是一个代价高昂的问题。每个死锁都涉及回滚。通过 TRY/CATCH 进行简单重试是处理死锁的非常标准的机制。但是,它会引入陷入循环的问题,因此请谨慎操作。

以下是其工作原理的示例。特别看看循环计数器的例子。通过限制重试次数,您可以远离危险区域。