BEGIN

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


Синтаксис

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

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

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

Описание

Команда BEGIN инициирует блок транзакции, то есть все операторы после команды 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