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. Рекомендуется быть осторожным с семантикой транзакций при переносе приложений баз данных.