BEGIN

BEGIN — начать блок транзакции


Синтаксис

BEGIN [ WORK | TRANSACTION ] [ режим_транзакции [, ...] ]

где режимом_транзакции может быть:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE

Описание

Команда BEGIN инициирует блок транзакции, то есть после ее выполнения все операторы будут выполняться в одной транзакции до тех пор, пока не будет дано явной команды COMMIT или ROLLBACK. По умолчанию (без BEGIN) QHB выполняет транзакции в режиме «автофиксации», то есть каждый оператор выполняется в своей собственной транзакции, а фиксация неявно выполняется в конце оператора (если выполнение было успешным; в противном случае выполняется откат).

В блоке транзакции операторы выполняются быстрее, потому что запуск/фиксация транзакции требует значительной активности процессора и диска. Также выполнение нескольких операторов внутри транзакции позволяет обеспечить согласованность при внесении нескольких связанных изменений: другие сеансы не смогут увидеть промежуточные состояния, в которых были сделаны не все связанные обновления.

Если указан уровень изоляции, режим чтения/записи или отложенный режим, новая транзакция имеет те же характеристики, что и после выполнения SET TRANSACTION.


Параметры

WORK
TRANSACTION

Необязательные ключевые слова. Они не имеют никакого эффекта.

Информацию о значении других параметров для данного оператора см. на справочной странице команды SET TRANSACTION.


Примечания

START TRANSACTION имеет ту же функциональность, что и BEGIN.

Для завершения блока транзакции воспользуйтесь командами COMMIT или ROLLBACK.

При попытке выполнить BEGIN внутри уже начатого блока транзакции будет выдано предупреждение, но на состояние транзакции это не повлияет. Для вложения субтранзакций внутри блока транзакции используйте точки сохранения (см. SAVEPOINT).

По соображениям обратной совместимости запятые между последовательными режимами_транзакции можно не ставить.


Примеры

Начало блока транзакции:

BEGIN;

Совместимость

Команда BEGIN является языковым расширением QHB. Она равнозначна стандартной команде SQL START TRANSACTION, справочная страница которой содержит дополнительную информацию о совместимости.

Значение DEFERRABLE параметра режим_транзакции является языковым расширением QHB.

По стечению обстоятельств во встраиваемом SQL ключевое слово BEGIN имеет другое значение. Поэтому при портировании приложений баз данных рекомендуется внимательно сверять семантику транзакций.


См. также

COMMIT, ROLLBACK, START TRANSACTION, SAVEPOINT