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