← Назад к вопросам

Что такое транзакция в БД?

1.0 Junior🔥 171 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое транзакция в БД?

Основное определение

Транзакция (Transaction) — это последовательность одного или нескольких операций над базой данных, которые выполняются как одна логическая единица. Либо все операции выполняются успешно, либо ни одна не выполняется. Это гарантирует консистентность и целостность данных.

ACID свойства транзакций

Транзакции должны удовлетворять четырём ключевым свойствам:

A — Atomicity (Атомарность)

  • Транзакция либо полностью выполнена, либо полностью откачена
  • Нет промежуточных состояний
  • All or nothing
  • Пример: Перевод денег — либо оба счёта изменились, либо ни один

C — Consistency (Консистентность)

  • БД переходит из одного консистентного состояния в другое
  • Все правила целостности соблюдаются
  • Нет нарушения constraints
  • Пример: Сумма всех счётов остаётся той же при переводе

I — Isolation (Изоляция)

  • Параллельные транзакции не влияют друг на друга
  • Каждая транзакция выполняется изолированно
  • Уровни изоляции различаются в силе гарантий

D — Durability (Долговечность)

  • Если транзакция подтверждена (committed), данные сохранены
  • Даже при сбое системы данные восстанавливаются

Жизненный цикл транзакции

BEGIN TRANSACTION → EXECUTE OPERATIONS → DECIDE (COMMIT or ROLLBACK) → TRANSACTION ENDS

Типы операций в транзакции

1. Read (SELECT) Получение данных из базы.

2. Write (INSERT, UPDATE, DELETE) Модификация данных в базе.

3. Control (COMMIT, ROLLBACK, SAVEPOINT) Управление жизненным циклом транзакции.

Примеры транзакций

Пример 1: Банковский перевод Если первая операция успешна, но вторая падает, ROLLBACK отменит обе.

Пример 2: Множественные таблицы Создание заказа с элементами и обновление инвентаря как один атомарный процесс.

Пример 3: С обработкой ошибок Успешная операция может быть откачена до контрольной точки при ошибке.

Уровни изоляции транзакций

1. Read Uncommitted (самый слабый)

  • Грязное чтение (Dirty Read)
  • Можно читать незафиксированные данные
  • Используется редко

2. Read Committed (по умолчанию в большинстве СУБД)

  • Нет грязного чтения
  • Но возможны Phantom Read и Non-repeatable Read
  • Наиболее распространённый уровень

3. Repeatable Read

  • Нет грязного и невторяемого чтения
  • Возможны Phantom Reads
  • Используется при необходимости консистентности

4. Serializable (самый сильный)

  • Полная изоляция
  • Все транзакции выполняются как если бы были последовательными
  • Может привести к снижению производительности

Проблемы параллельных транзакций

Dirty Read

  • Чтение незафиксированных данных от другой транзакции
  • Если та откатится, прочитаны были неправильные данные

Non-repeatable Read

  • В одной транзакции одна и та же строка читается дважды с разными значениями
  • Другая транзакция изменила её между чтениями

Phantom Read

  • Повторный SELECT возвращает другое количество строк
  • Другая транзакция добавила или удалила строки

Управление транзакциями

Явное управление BEGIN TRANSACTION — операции — COMMIT

Автоматические транзакции АВТОКОММИТ сохраняет каждую операцию отдельно.

Savepoints (контрольные точки) Позволяют откатиться только до контрольной точки.

Лучшие практики с транзакциями

  • Держи транзакции короткими
  • Минимизируй время блокировки
  • Не делай сетевых вызовов внутри транзакции
  • Обрабатывай исключения и откатывай при ошибке
  • Используй appropriate isolation level
  • Логируй ошибки транзакций
  • Избегай deadlocks правильным порядком доступа к ресурсам

Транзакции — критическая концепция для обеспечения надёжности и целостности данных в приложениях.