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 — это языковое расширение PostgreSQL. Эта команда равнозначна соответствующей стандарту SQL команде START TRANSACTION, на справочной странице которой можно найти дополнительные сведения о совместимости.
Значение DEFERRABLE параметра режим_транзакции является языковым расширением PostgreSQL.
По стечению обстоятельств ключевое слово BEGIN имеет другое значение во встраиваемом SQL, поэтому при портировании приложений баз данных рекомендуется внимательно сверить семантику транзакций.
Пред. | Начало | След. |
ANALYZE | Уровень выше | CHECKPOINT |