FirebirdSQL logo

SKIP LOCKED

Назначение

Пропустить заблокированное.

Предложение SKIP LOCKED заставляет движок пропускать записи, заблокированные другими транзакциями,вместо того, чтобы ждать или вызывать ошибки при конфликте.

Такая функциональность полезна для реализации рабочих очередей, когда один или несколько процессов отправляютданные в таблицу и выдают событие, в то время как рабочие процессы прослушивают эти события и читают/удаляют элементы из таблицы.Используя SKIP LOCKED, несколько рабочих потоков могут получать эксклюзивные рабочие элементы из таблицы без конфликтов.

Note

Если предложение SKIP LOCKED используется совместно с FIRST/SKIP/ROWS/OFFSET/FETCH, то сначала пропускаются заблокированные записи,а затем применяются ограничители FIRST/SKIP/ROWS/OFFSET/FETCH к оставшимся записям.

Использование предложения FOR UPDATE

Если предложение FOR UPDATE предшествует предложению WITH LOCK, то буферизация выборки не используется.Таким образом, блокировка применяется к каждой строке, одна за другой, по мере извлечения записей.Это делает возможным ситуацию, в которой успешная блокировка данных перестаёт работатьпри достижении в выборке строки, заблокированной другой транзакцией.

Tip

Кроме того, некоторые компоненты доступа позволяют установить размер буфера выборки и уменьшить его до 1 записи.Это позволяет вам заблокировать и редактировать строку до выборки и блокировки следующей или обрабатывать ошибки, не отменяя действий вашей транзакции.

Note

Опциональное предложение “OF <column-names>” не делает ничего вообще.

See also

FOR UPDATE [OF]