BEGIN
BEGIN — начать блок транзакций
Синтаксис
BEGIN [ AUTONOMOUS ] [ WORK | TRANSACTION ] [ режим_транзакции [, ...] ]
Где режим_транзакции может быть следующим:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
[ NOT ] DEFERRABLE
Описание
Команда BEGIN
инициирует блок транзакций, то есть после ее выполнения все операторы будут выполняться в одной транзакции до тех пор, пока
не будет дано явной команды COMMIT или ROLLBACK. По умолчанию
(без BEGIN
) QHB выполняет транзакции в режиме «autocommit» (автофиксация),
то есть каждый оператор выполняется в своей собственной транзакции, а
фиксация неявно выполняется в конце оператора (если выполнение было
успешным; в противном случае выполняется откат).
В блоке транзакций операторы выполняются быстрее, потому что запуск/фиксация транзакций требует значительной активности процессора и диска. Также выполнение нескольких операторов внутри транзакции позволяет обеспечить согласованность при внесении нескольких связанных изменений: другие сеансы не смогут увидеть промежуточные состояния, в которых были сделаны не все связанные обновления.
Если указан уровень изоляции, режим чтения/записи или отложенный режим, новая транзакция имеет те же характеристики, что и после выполнения SET TRANSACTION.
Параметры
WORK
TRANSACTION
Необязательные ключевые слова. Они не имеют никакого эффекта.
Информацию о значении других параметров для данного оператора см. в разделе SET TRANSACTION.
Примечания
START TRANSACTION имеет ту же функциональность, что и BEGIN
.
Для завершения блока транзакций используйте COMMIT или ROLLBACK.
При попытке выполнить BEGIN
внутри уже начатого блока транзакции
будет выдано предупреждение, но на состояние транзакции это не повлияет. Для вложения
подтранзакций внутри блока транзакции используйте точки сохранения (см.
SAVEPOINT).
По соображениям обратной совместимости запятые между последовательными transaction_modes можно не ставить.
Примеры
Начало блока транзакции:
BEGIN;
Совместимость
Команда BEGIN
является языковым расширением QHB.
BEGIN
равнозначна стандартной SQL команде START TRANSACTION,
справочная страница которой содержит дополнительную информацию о совместимости.
Значение DEFERRABLE параметра режим_транзакции является языковым расширением QHB.
По стечению обстоятельств ключевое слово BEGIN
имеет другое значение
во встраиваемом SQL. Поэтому рекомендуется при портировании приложений баз данных
внимательно сверять семантику транзакций.