Вопрос с собеседования · Базы данных

Что такое транзакция в базе данных и как работают BEGIN, COMMIT и ROLLBACK?

JuniorТранзакции и изоляция
Ещё спрашивают так:
  • Зачем нужны транзакции?
  • Что будет, если ошибка случится посередине перевода денег?
Коротко

Транзакция — группа операций, которая выполняется целиком или никак. BEGIN открывает её, COMMIT фиксирует все изменения разом, ROLLBACK отменяет всё сделанное с начала транзакции. Классический пример — перевод: списать со счёта A и зачислить на счёт B. Если после списания произойдёт ошибка, без транзакции деньги пропадут; с транзакцией изменения откатятся.

  • Пока транзакция не зафиксирована, другие сессии (обычно) не видят её изменений
  • После COMMIT данные сохранены даже при сбое питания (durability)
  • Держать транзакцию открытой долго — плохо: она удерживает блокировки

А ещё В коде транзакции обычно открывает фреймворк (@Transactional, with conn.begin())

Подробно

Пример:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;   -- или ROLLBACK при ошибке

ACID: атомарность (всё или ничего), согласованность (ограничения соблюдены), изоляция (параллельные транзакции не мешают друг другу), долговечность (зафиксированное не теряется).

Ошибки новичков: выполнять связанные изменения в разных транзакциях; делать внутри транзакции долгие внешние вызовы (HTTP, отправку писем) — блокировки держатся всё это время.

Что хотят услышать

  • Всё или ничего на примере перевода.
  • BEGIN, COMMIT, ROLLBACK.
  • Связь с ACID.
  • Короткие транзакции без внешних вызовов.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Группа операций «всё или ничего»: COMMIT фиксирует изменения, ROLLBACK отменяет все
  • ✗Транзакция ускоряет выполнение запросов за счёт кэша
  • ✗ROLLBACK отменяет только последний запрос, а COMMIT фиксирует всё, что сделано с момента BEGIN
  • ✗Внутри транзакции полезно делать долгие HTTP-вызовы, чтобы всё было атомарно

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования