Вопрос проверяет понимание надёжности работы с БД, умение обеспечивать целостность данных и знание базовых гарантий транзакций.
Транзакция — это набор операций, который выполняется как единое целое. Либо все операции применяются, либо ни одна. Свойства ACID гарантируют корректность данных даже при ошибках и сбоях. Это основа безопасной работы с базой данных.
Транзакции нужны для того, чтобы данные в базе оставались корректными при любых сбоях — ошибках кода, падениях сервера или параллельных запросах.
Определение:
Транзакция — это логически связанный набор операций с БД, который либо выполняется полностью (COMMIT), либо полностью отменяется (ROLLBACK).
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
ACID — это набор гарантий, которые обеспечивает транзакция.
Все операции выполняются целиком
При ошибке всё откатывается
Пример:
Деньги не могут “исчезнуть” с одного счёта, не появившись на другом
После транзакции данные остаются корректными
Соблюдаются ограничения и ключи
Пример:
Внешние ключи не ломаются
Баланс не становится отрицательным, если есть проверка
Параллельные транзакции не мешают друг другу
Каждая работает как будто одна
(уровни изоляции разбираются отдельно)
После COMMIT данные не пропадут
Даже при перезапуске БД
Финансовые операции
Обновление связанных таблиц
Любые критичные изменения данных
Делать несколько UPDATE без транзакции
Полагаться только на логику приложения
Транзакции обеспечивают целостность и надёжность данных. Свойства ACID — это фундамент безопасной работы с реляционными БД.