Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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 Greengage DB запускает транзакции в режиме автокоммита (autocommit), то есть каждый оператор выполняется в собственной транзакции, и коммит неявно выполняется в конце оператора (если выполнение было успешным, в противном случае — выполняется откат изменений).

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

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

Параметры

Параметр Описание

WORK
TRANSACTION

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

SERIALIZABLE
READ COMMITTED
READ UNCOMMITTED
REPEATABLE READ
DEFERRABLE

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

  • READ UNCOMMITTED позволяет транзакциям видеть изменения, внесенные незафиксированными параллельными транзакциями. Это невозможно в Greengage DB, поэтому READ UNCOMMITTED обрабатывается так же, как READ COMMITTED.

  • READ COMMITTED (дефолтный уровень изоляции в Greengage DB) гарантирует, что оператор может видеть только строки, зафиксированные до его начала. Один и тот же оператор, выполненный дважды в транзакции, может дать разные результаты, если другая параллельная транзакция зафиксирует изменения после первого выполнения оператора.

  • REPEATABLE READ гарантирует, что транзакция может видеть только строки, зафиксированные до ее начала. REPEATABLE READ — это самый строгий уровень изоляции транзакций, поддерживаемый Greengage DB. Приложения, использующие уровень изоляции REPEATABLE READ, должны быть готовы повторить транзакции из-за сбоев сериализации.

  • SERIALIZABLE гарантирует, что выполнение нескольких параллельных транзакций дает тот же эффект, что и выполнение тех же транзакций по одной за раз. Если вы укажете SERIALIZABLE, Greengage DB переключится на REPEATABLE READ.

  • Указание DEFERRABLE не имеет эффекта в Greengage DB, но синтаксис поддерживается для совместимости с PostgreSQL. Транзакция может быть отложена только в том случае, если она READ ONLY и SERIALIZABLE, а Greengage DB не поддерживает транзакции SERIALIZABLE

Примечания

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

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

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

Примеры

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

BEGIN;

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

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;

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

BEGIN — это расширение языка Greengage DB. Оно эквивалентно стандартной SQL-команде START TRANSACTION.

Режим транзакции DEFERRABLE — это расширение языка Greengage DB.

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

См. также