RECORD_VERSION
Для этого уровня изолированности можно указать один из двух значений дополнительной характеристики в зависимости от желаемого способа разрешения конфликтов: RECORD_VERSION
и NO RECORD_VERSION
.Как видно из их имён они являются взаимоисключающими.
-
NO RECORD_VERSION
является в некотором роде механизмом двухфазной блокировки. В этом случае транзакция не может прочитать любую запись, которая была изменена параллельной активной (неподтвержденной) транзакцией.-
Если указана стратегия разрешения блокировок
NO WAIT
, то будет немедленно выдано соответствующее исключение. -
Если указана стратегия разрешения блокировок
WAIT
, то это приведёт к ожиданию завершения или откату конкурирующей транзакции.Если конкурирующая транзакция откатывается, или, если она завершается и её идентификатор старее (меньше), чем идентификатор текущей транзакции, то изменения в текущей транзакции допускаются.Если конкурирующая транзакция завершается и её идентификатор новее (больше), чем идентификатор текущей транзакции, то будет выдана ошибка конфликта блокировок.
-
-
При задании
RECORD_VERSION
транзакция всегда читает последнюю подтверждённую версию записей таблиц, независимо от того, существуют ли изменённые и ещё не подтверждённые версии этих записей. В этом случае режим разрешения блокировок (WAIT
илиNO WAIT
) никак не влияет на поведение транзакции при её старте.
В Firebird API для способа разрешения конфликтов NO RECORD_VERSION
соответствует константа isc_tpb_no_rec_version
,а RECORD_VERSION
— isc_tpb_rec_version
.
Warning
|
Начиная с Firebird 4.0 эти опции являются устаревшими.По умолчанию они игнорируются и запускается транзакция |