如何锁定行,并在多个事务中使用锁定?

时间:2017-06-20 22:26:12

标签: sql locking azure-sql-database race-condition

我的情况需要:

  1. 读取行的值。
  2. 如果某列的值为' X',请执行操作A.否则,执行操作B.
  3. 如果我们执行了操作A,请使用操作结果更新列。
  4. 操作A不是数据库操作,可能需要一段时间才能运行,并且它不可逆。操作B不是数据库操作,但运行速度非常快。该序列在多个服务器上的多个线程上执行。

    目前我们没有锁定,因此我们偶尔会看到多次执行动作A,而它应该只发生一次。我认为我唯一的解决方案是以某种方式用获取锁步骤和释放锁步骤包装上面的序列,我不知道如何做到这一点

    我看过a similar question,其答案是添加“锁定”字样。和'查询时间'列的行。然而,在那种情况下,OP并不担心经常重新获得锁定。如果我每次想要执行序列时都必须旋转等待上一次锁定到期,那么我的服务器性能可能就会消失。

    我可以在这里使用SQL内置的东西吗?

1 个答案:

答案 0 :(得分:5)

将“X”值更新为“待定”。

完成操作A后,将“待处理”更新为任何内容。

无需锁定。