Что такое транзакция в контексте баз данных?

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

Ответ

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

  • Atomicity (Атомарность): Все операции транзакции выполняются как одно целое. Невозможно частичное выполнение.
  • Consistency (Согласованность): Транзакция переводит базу из одного согласованного состояния в другое, соблюдая все бизнес-правила и constraints (ограничения).
  • Isolation (Изолированность): Параллельные транзакции не должны влиять друг на друга. Уровни изоляции (Read Committed, Repeatable Read, Serializable) определяют степень этого влияния и компромисс с производительностью.
  • Durability (Долговечность): После успешного завершения (commit) изменения, внесенные транзакцией, сохраняются навсегда, даже в случае сбоя системы.

Практический пример на SQL:

BEGIN TRANSACTION; -- Начало транзакции

UPDATE accounts SET balance = balance - 100.00 WHERE id = 1; -- Списание
UPDATE accounts SET balance = balance + 100.00 WHERE id = 2; -- Зачисление
-- Предположим, здесь проверяется, что баланс не ушел в минус.
-- Если всё успешно:
COMMIT; -- Фиксация изменений
-- Если что-то пошло не так (например, недостаточно средств):
-- ROLLBACK; -- Откат всех изменений в этой транзакции

В приложениях я использую транзакции для операций, которые должны быть атомарными: финансовые переводы, регистрация пользователя (создание записи + отправка письма), синхронное обновление нескольких связанных таблиц.

Видео-ответы