Firebird 锁和 select 个解锁字段
Firebird lock and select unlocked fields
我有一个问题
SELECT FIRST 10 * FROM FP_TASKS WITH LOCK
但我有多个客户使用 table,我需要为每个选定的客户提供 10 行未锁定的内容。
有什么办法可以做如下的事情吗?
SELECT FIRST 10 * FROM FP_TASKS
WHERE ROW NOT LOCKED
WITH LOCK
如果您连续持有锁,那么另一个事务中的另一个 select .. with lock
将等待释放锁或引发异常(取决于事务配置)。
选择时无法忽略或跳过锁定的行。 Firebird documentation 还明确表示:
WITH LOCK provides a limited explicit pessimistic locking capability
for cautious use in conditions where the affected row set is:
a. extremely small (ideally, a singleton), and
b. precisely controlled by the application code.
您的申请既不'extremely small'也不'precisely controlled'。
您应该考虑使用短事务分配行,该事务使用某种特定于连接的声明更新行,或者可能是将行分配给特定客户端的单个生产者或资源管理器。
我有一个问题
SELECT FIRST 10 * FROM FP_TASKS WITH LOCK
但我有多个客户使用 table,我需要为每个选定的客户提供 10 行未锁定的内容。 有什么办法可以做如下的事情吗?
SELECT FIRST 10 * FROM FP_TASKS
WHERE ROW NOT LOCKED
WITH LOCK
如果您连续持有锁,那么另一个事务中的另一个 select .. with lock
将等待释放锁或引发异常(取决于事务配置)。
选择时无法忽略或跳过锁定的行。 Firebird documentation 还明确表示:
WITH LOCK provides a limited explicit pessimistic locking capability for cautious use in conditions where the affected row set is:
a. extremely small (ideally, a singleton), and
b. precisely controlled by the application code.
您的申请既不'extremely small'也不'precisely controlled'。
您应该考虑使用短事务分配行,该事务使用某种特定于连接的声明更新行,或者可能是将行分配给特定客户端的单个生产者或资源管理器。