Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
Databricks SQL
Начинает новую интерактивную транзакцию, которая группирует несколько инструкций SQL в одну единицу работы, которую можно зафиксировать или откатить.
В качестве альтернативы интерактивным транзакциям можно определить неинтерактивные транзакции с помощью синтаксиса BEGIN ATOMIC ... END; . См. составную инструкцию ATOMIC.
Синтаксис
BEGIN { TRANSACTION | WORK }
Параметры
Это выражение не имеет параметров.
Примечания
- Если интерактивная транзакция
BEGIN TRANSACTIONуже активна, выполнениеBEGIN TRANSACTIONповторно приведет к ошибке TRANSACTION_NOT_SUPPORTED.NESTED_TRANSACTION. Интерактивные транзакции не поддерживают вложение. -
BEGIN TRANSACTIONиBEGIN WORKявляются эквивалентными вариантами синтаксиса.
Примеры
В следующих примерах показаны распространенные интерактивные шаблоны транзакций.
Базовая транзакция между таблицами
Запустите каждую инструкцию отдельно.
BEGIN TRANSACTION;
-- Insert a new record
INSERT INTO my_table VALUES (1, 'test');
-- Update records in another table
UPDATE another_table
SET value = 'updated'
WHERE id = 5;
-- Commit all changes in both tables atomically
COMMIT TRANSACTION;
Чтение собственных записей
Запустите каждую инструкцию отдельно.
BEGIN TRANSACTION;
-- Insert new data
INSERT INTO customers VALUES (101, 'New Customer');
-- Query can see the inserted data within the same transaction
SELECT * FROM customers WHERE id = 101;
-- Returns the newly inserted row even though it's not yet committed
-- Update the newly inserted data
UPDATE customers SET name = 'Updated Customer Name' WHERE id = 101;
-- Query sees the updated value
SELECT name FROM customers WHERE id = 101;
-- Returns 'Updated Customer Name'
-- Commit makes changes visible to other transactions
COMMIT TRANSACTION;
Транзакция с откатом
Запустите каждую инструкцию отдельно.
BEGIN TRANSACTION;
-- Attempt an insert operation
INSERT INTO my_table VALUES (1, 'incorrect-value');
-- After discovering the mistake, rollback the transaction
-- (no changes are actually made to the tables)
ROLLBACK TRANSACTION;
Видимость незафиксированных изменений
В этом примере изменения в транзакции не видны другим сеансам, пока транзакция не будет зафиксирована. Запустите каждую инструкцию отдельно.
Сеанс 1.
BEGIN TRANSACTION;
-- Insert new data
INSERT INTO products VALUES (999, 'New Product', 29.99);
-- At this point, Session 2 cannot see this data
-- You can see your own changes
SELECT * FROM products WHERE id = 999;
-- Returns the new product
Сеанс 2 (одновременный):
-- This query does not see the uncommitted data from Session 1
SELECT * FROM products WHERE id = 999;
-- Returns no rows
Сеанс 1 (продолжение):
-- Now commit the transaction
COMMIT TRANSACTION;
Сеанс 2 (после коммита):
-- Now the query can see the committed data
SELECT * FROM products WHERE id = 999;
-- Returns the new product
Видимость параллельных изменений
В этом примере параллельные изменения, внесенные за пределами транзакции, не видны транзакции. Azure Databricks записывает согласованный моментальный снимок каждой таблицы при первом доступе, а все последующие операции чтения этой таблицы используют этот моментальный снимок (повторяемое чтение). Запустите каждую инструкцию отдельно.
Сеанс 1 (запуск транзакции и чтение таблицы):
BEGIN TRANSACTION;
-- Read the table; captures a snapshot of orders at this point
SELECT COUNT(*) FROM orders;
-- Returns: 1
Сеанс 2 (одновременный сеанс добавляет строку):
INSERT INTO orders VALUES (2, 'Product B', 75.00);
COMMIT;
Сеанс 1 (продолжение, повторное чтение таблицы):
-- Still reads from the original snapshot; the new row is not visible
SELECT COUNT(*) FROM orders;
-- Returns: 1 (unchanged, even though Session 2 committed a new row)
COMMIT;
Это гарантирует согласованность операций чтения во всей транзакции независимо от одновременных изменений.
Связанные статьи
- Составная инструкция ATOMIC (неинтерактивные транзакции): выполнение нескольких инструкций SQL в виде одной атомарной транзакции с автоматической фиксацией и откатом
- COMMIT: завершите интерактивную транзакцию и сделайте все изменения постоянными
- ROLLBACK: откат интерактивной транзакции и отмена всех изменений
- Транзакции: обзор поддержки транзакций, требований и ограничений
- Режимы транзакций: подробные шаблоны и примеры для неинтерактивных и интерактивных транзакций
-
Оператор BEGIN END составной инструкции:
BEGIN ... ENDблоки без ключевого словаATOMIC