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