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