Ответ
При возникновении необработанного исключения во время выполнения SQL-транзакции происходит откат (ROLLBACK) всех изменений, сделанных в рамках этой транзакции, для сохранения целостности данных.
Почему это важно: Транзакция должна быть атомарной — либо выполняются все её операции, либо ни одной. Исключение нарушает этот принцип, поэтому система откатывается к состоянию до начала транзакции (BEGIN).
Практический пример:
BEGIN; -- Начало транзакции
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
-- Здесь может возникнуть исключение (например, нарушение ограничения)
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- Фиксация изменений
Если исключение возникает после первого UPDATE, второй не выполняется, а изменения из первого автоматически откатываются. Без этого механизма баланс пользователя 1 уменьшился бы, а пользователь 2 не получил бы деньги, что привело бы к потере данных.
Лучшие практики:
- Используйте явный
ROLLBACKв блокахCATCH/EXCEPTION. - Настройте уровень изоляции транзакции в зависимости от требований.
- Обрабатывайте исключения на уровне приложения для принятия решения о повторе или откате.