Перейти к основному содержимому

BEGIN

примечание

Эта страница переведена при помощи нейросети GigaChat.

BEGIN – начало блока транзакции.

Синтаксис

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

where transaction_mode is one of:

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

Описание

BEGIN инициирует транзакционный блок. Это означает, что все SQL-операторы, выполненные после BEGIN, будут частью одной транзакции и вступят в силу только после явного выполнения COMMIT или ROLLBACK.

По умолчанию PostgreSQL работает в режиме автокоммита — каждая команда выполняется в своей собственной транзакции: если команда прошла успешно, изменения автоматически фиксируются, если произошла ошибка — откатываются.

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

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

Параметры

WORK
TRANSACTION
Необязательные ключевые слова, не влияют на поведение команды.

Смотрите раздел SET TRANSACTION для получения информации о других параметрах.

Примечания

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

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

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

В PostgreSQL допускается опускать запятые между transaction_modes — это сделано для совместимости со старыми версиями.

Примеры

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

BEGIN;

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

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

Команда DEFERRABLE transaction_mode является расширением языка PostgreSQL.

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

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

COMMIT, ROLLBACK, START TRANSACTION, SAVEPOINT