Firebird锁定并选择未锁定的字段

时间:2017-09-01 14:16:43

标签: sql firebird deadlock database-deadlocks

我有一个查询

SELECT FIRST 10 * FROM FP_TASKS WITH LOCK

但我有多个客户端使用表,我需要每个选定的客户端10行未锁定.. 有没有办法做下面的事情?

SELECT FIRST 10 * FROM FP_TASKS
 WHERE ROW NOT LOCKED
WITH LOCK

1 个答案:

答案 0 :(得分:1)

如果您持有一个锁,那么另一个事务中的另一个select .. with lock将等待释放锁定或引发异常(取决于事务配置)。

选择时无法忽略或跳过锁定的行。 Firebird documentation也明确说:

  

WITH LOCK提供有限的显式悲观锁定功能   在受影响的行集为:

的条件下谨慎使用      

一个。非常小(理想情况下,单身),和   湾由应用程序代码精确控制。

您的查询既不是“非常小”,也不是您的应用程序“精确控制”。

您应该考虑使用短事务来分配行,该事务使用某种类型的特定于连接的声明更新行,或者可能是将行分配给特定客户端的单个生产者或资源管理器。