Что делает команда ROLLBACK в SQL?

«Что делает команда ROLLBACK в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ROLLBACK — это команда управления транзакциями (TCL) в SQL, которая отменяет все изменения, сделанные в текущей транзакции, возвращая базу данных в состояние, которое было на момент начала транзакции (или до последнего COMMIT).

Как это работает:

  1. Транзакция начинается неявно или командой BEGIN / START TRANSACTION.
  2. Выполняются операции INSERT, UPDATE, DELETE.
  3. Если что-то пошло не так (ошибка, логическое условие), выполняется ROLLBACK.
  4. Все изменения в рамках этой транзакции аннулируются.

Пример сценария перевода денег:

START TRANSACTION;

-- Списать 100 у.е. со счета 1
UPDATE accounts SET balance = balance - 100 WHERE id = 1;

-- Зачислить 100 у.е. на счет 2
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- Проверяем условие: если баланс стал отрицательным, откатываем
IF (SELECT balance FROM accounts WHERE id = 1) < 0 THEN
    ROLLBACK; -- ОБА UPDATE отменяются!
    SELECT 'Transaction failed: insufficient funds';
ELSE
    COMMIT; -- Фиксируем изменения
    SELECT 'Transaction successful';
END IF;

Ключевые особенности:

  • Атомарность: ROLLBACK обеспечивает принцип "все или ничего".
  • Границы: Действует только в пределах текущей транзакции.
  • Необратимость: После COMMIT откатить изменения через ROLLBACK нельзя.
  • Автоматический откат: При обрыве соединения СУБД обычно выполняет ROLLBACK автоматически.

Почему это важно: ROLLBACK — основа для поддержания целостности данных в сложных операциях, где промежуточный сбой не должен оставлять базу в противоречивом состоянии.