Ответ
Транзакция — это атомарная последовательность операций с базой данных (например, несколько INSERT, UPDATE), которая должна быть выполнена как единое целое. ACID — это набор из четырёх ключевых свойств, которые гарантируют корректность и надёжность каждой транзакции.
Связь: ACID-свойства определяют, как СУБД должна обрабатывать транзакции, чтобы данные оставались целостными даже в условиях сбоев или параллельного доступа.
Разбор ACID на примере банковского перевода:
BEGIN TRANSACTION; -- Начало транзакции
UPDATE accounts SET balance = balance - 100.00 WHERE id = 1; -- Списание
UPDATE accounts SET balance = balance + 100.00 WHERE id = 2; -- Зачисление
COMMIT; -- Фиксация изменений
-- или ROLLBACK; -- Откат в случае ошибки
- Атомарность (Atomicity): Гарантирует, что либо выполнятся обе операции (списание и зачисление), либо ни одна. Если после списания произойдёт сбой, транзакция откатится, и деньги вернутся на счёт 1.
- Согласованность (Consistency): Транзакция переводит базу из одного валидного состояния в другое. Проверяются все ограничения (CHECK, FOREIGN KEY). Например, нельзя списать больше, чем есть на счёте (если есть соответствующее ограничение).
- Изолированность (Isolation): Параллельно выполняющиеся транзакции не должны влиять друг на друга. Если два перевода на один счёт происходят одновременно, их результат должен быть таким, как если бы они выполнялись последовательно. Уровни изоляции (Read Committed, Repeatable Read и др.) регулируют степень этой изоляции.
- Долговечность (Durability): После успешного
COMMITизменения сохраняются на диске (в WAL — Write-Ahead Log) и не теряются даже при аварийном отключении сервера.