Поделиться через


коммит

Область применения:отмечено «Да» Databricks SQL

Фиксирует текущую интерактивную транзакцию, делая все изменения во всех измененных таблицах постоянными. Сведения о требованиях и шаблонах использования для интерактивных транзакций см. в разделе "Интерактивные транзакции".

Синтаксис

COMMIT [ TRANSACTION | WORK ]

Параметры

Это выражение не имеет параметров.

Примечания

  • Если активная транзакция COMMIT отсутствует, выполнение приводит к ошибке NO_ACTIVE_TRANSACTION .
  • При сбое COMMIT транзакция прерывается, и необходимо явно запустить ROLLBACK, чтобы сбросить состояние транзакции перед началом новой транзакции. Распространенные причины COMMIT сбоев включают конфликты записи с другими параллельными транзакциями.
  • Для выполнения этой инструкции необходимо иметь активную транзакцию и соответствующие разрешения для всех объектов, считываемых или измененных в транзакции.

Примеры

В следующих примерах показано, как зафиксировать интерактивные транзакции.

Базовая транзакция

Запустите каждую инструкцию отдельно.

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');
-- Update the newly inserted data
UPDATE customers SET name = 'Updated Customer Name' WHERE id = 101;
-- Query sees the updated value within the transaction
SELECT name FROM customers WHERE id = 101;
-- Returns 'Updated Customer Name'
-- Commit makes changes visible to other transactions
COMMIT;

Обработка сбоя фиксации

При сбое COMMIT из-за конфликтов или других ошибок необходимо однозначно откатить. Запустите каждую инструкцию отдельно.

BEGIN TRANSACTION;
-- Make changes
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Attempt to commit
COMMIT;
-- If COMMIT fails (e.g., due to write conflict),
-- the transaction is aborted
-- You must explicitly roll back before starting a new transaction
ROLLBACK;