Ответ
Да, операция UPDATE по умолчанию является транзакционной в контексте СУБД.
Ключевые моменты:
- Часть транзакции: Любая DML-операция (
INSERT,UPDATE,DELETE) выполняется внутри транзакции — явной или неявной. - Соблюдение ACID:
UPDATEподчиняется свойствам транзакций:- Атомарность (Atomicity): Изменения либо применяются все (
COMMIT), либо откатываются все (ROLLBACK). - Согласованность (Consistency):
UPDATEпереводит базу из одного согласованного состояния в другое (с учетом ограничений). - Изолированность (Isolation): Параллельные
UPDATEк одним строкам управляются уровнями изоляции. - Долговечность (Durability): После
COMMITизменения фиксируются.
- Атомарность (Atomicity): Изменения либо применяются все (
Пример транзакции с 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 представляет собой однооперационную транзакцию, которая автоматически фиксируется.