Короткий ответ
Транзакция — последовательность операций с базой данных, которая выполняется как единое целое (unit of work): либо все операции успешно применяются, либо, если что-то пошло не так, все изменения откатываются, и база остаётся в прежнем состоянии. ACID — набор свойств, которым должна удовлетворять надёжная транзакция: Atomicity, Consistency, Isolation, Durability.
Как это работает подробнее
Классический пример — банковский перевод: если не прошло ни списание, ни зачисление, перевод целиком откатывается, и остатки не теряются. ACID особенно важен для систем с параллельным доступом и финансовыми операциями, где целостность данных критична.
- Atomicity — атомарность: транзакция выполняется полностью или не выполняется вовсе; при ошибке одной операции все изменения откатываются.
- Consistency — согласованность: после завершения база остаётся в валидном состоянии, соблюдены правила и ограничения (например, остаток на складе не отрицательный).
- Isolation — изоляция: параллельные транзакции не влияют друг на друга; уровни изоляции — Read Uncommitted, Read Committed, Repeatable Read, Serializable.
- Durability — долговечность: после commit изменения сохраняются постоянно, даже при сбое системы или перезапуске сервера.
Пример кода
Транзакция перевода
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- при ошибке вместо COMMIT выполняется ROLLBACKЧто использовать на практике
- Группируйте связанные изменения (например, списание и зачисление) в одну транзакцию.
- В Spring используйте декларативные транзакции через аннотацию
@Transactional. - Уровень изоляции выбирайте осознанно, балансируя между консистентностью и параллелизмом.
Подводные камни
- Долго открытая транзакция удерживает блокировки и соединение — растёт риск конфликтов и дедлайнов.
- Чем выше уровень изоляции, тем ниже параллелизм; стандартные уровни по-разному защищают от аномалий чтения.
- ACID гарантируется в пределах одной транзакции базы: распределённые операции требуют других механизмов согласованности.
Как отвечать на собеседовании
- Дайте определение транзакции как единого целого: либо всё применяется, либо всё откатывается → приведите пример банковского перевода → расшифруйте ACID по буквам с коротким пояснением каждого свойства → назовите уровни изоляции → упомяните SQL-команды BEGIN/COMMIT/ROLLBACK и @Transactional в Spring → завершите выводом о важности ACID для финансовых и конкурентных систем.