Является ли операция UPDATE в SQL транзакционной?

«Является ли операция UPDATE в SQL транзакционной?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, операция UPDATE по умолчанию является транзакционной в контексте СУБД.

Ключевые моменты:

  1. Часть транзакции: Любая DML-операция (INSERT, UPDATE, DELETE) выполняется внутри транзакции — явной или неявной.
  2. Соблюдение ACID: UPDATE подчиняется свойствам транзакций:
    • Атомарность (Atomicity): Изменения либо применяются все (COMMIT), либо откатываются все (ROLLBACK).
    • Согласованность (Consistency): UPDATE переводит базу из одного согласованного состояния в другое (с учетом ограничений).
    • Изолированность (Isolation): Параллельные UPDATE к одним строкам управляются уровнями изоляции.
    • Долговечность (Durability): После COMMIT изменения фиксируются.

Пример транзакции с UPDATE:

START TRANSACTION; -- Начало явной транзакции

UPDATE accounts SET balance = balance - 100.00 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100.00 WHERE user_id = 2;
-- Оба UPDATE являются частью одной атомарной операции перевода.

COMMIT; -- Фиксация изменений
-- или ROLLBACK; -- Откат обоих UPDATE в случае ошибки

Важно: В режиме AUTOCOMMIT=ON (по умолчанию в многих клиентах) каждый отдельный UPDATE представляет собой однооперационную транзакцию, которая автоматически фиксируется.