BEGIN

Запускает блок транзакции.

Синтаксис

BEGIN [WORK | TRANSACTION] [transaction_mode]

Где transaction_mode:

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

Описание

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

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

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

Параметры

WORK

TRANSACTION
— Необязательные ключевые слова. Не оказывают влияния.

SERIALIZABLE

READ COMMITTED

READ UNCOMMITTED
— Стандарт SQL определяет четыре уровня изоляции транзакций: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE.

  • READ UNCOMMITTED позволяет транзакциям просматривать изменения, сделанные незафиксированными параллельными транзакциями. В базе данных YMatrix это невозможно, поэтому READ UNCOMMITTED эквивалентен READ COMMITTED.
  • READ COMMITTED — уровень изоляции по умолчанию в базе данных YMatrix, гарантирующий, что операторы могут видеть только строки, зафиксированные до начала их выполнения. Если другая параллельная транзакция была зафиксирована после первого выполнения оператора, один и тот же оператор, выполненный дважды в рамках одной транзакции, может вернуть разные результаты.
  • REPEATABLE READ — уровень изоляции, гарантирующий, что транзакция может видеть только строки, зафиксированные до начала самой транзакции. REPEATABLE READ — самый строгий уровень изоляции, поддерживаемый базами данных YMatrix. Из-за возможного отказа сериализации необходимо подготовить приложение с уровнем изоляции REPEATABLE READ к повторному выполнению транзакции.
  • SERIALIZABLE — уровень изоляции транзакций, обеспечивающий, что выполнение нескольких параллельных транзакций будет эквивалентно их последовательному выполнению. Если указано SERIALIZABLE, база данных YMatrix переключается на уровень REPEATABLE READ.
  • Указание DEFERRABLE недопустимо в базе данных YMatrix, но поддерживается синтаксически для совместимости с PostgreSQL. Отложенная транзакция допускается только если она READ ONLY и SERIALIZABLE, однако база данных YMatrix не поддерживает транзакции уровня SERIALIZABLE.

Примечание

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

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

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

Пример

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

BEGIN;

Начать блок транзакции с уровнем изоляции REPEATABLE READ:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;

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

BEGIN — расширение языка базы данных YMatrix. Эквивалентна стандартной SQL команде START TRANSACTION.

Режим транзакции DEFERRABLE — расширение языка базы данных YMatrix.

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

Смотрите также

COMMIT , ROLLBACK , START TRANSACTION , SAVEPOINT , SAVEPOINT