Ответ
Транзакция — это логическая единица работы с базой данных, которая либо выполняется полностью, либо не выполняется вовсе. Она группирует набор операций (например, INSERT, UPDATE, DELETE) в один атомарный блок.
Свойства транзакций (ACID):
- Atomicity (Атомарность): Транзакция выполняется как единое целое. При сбое откатываются все её изменения.
- Consistency (Согласованность): Транзакция переводит базу из одного согласованного состояния в другое, не нарушая целостностных ограничений (constraints).
- Isolation (Изолированность): Параллельные транзакции не должны влиять друг на друга. Уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) определяют степень этого влияния.
- Durability (Долговечность): После успешного завершения (commit) изменения, внесённые транзакцией, сохраняются в базе данных постоянно, даже в случае сбоя системы.
Пример на SQL:
BEGIN TRANSACTION; -- Начало транзакции
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; -- Списание
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; -- Зачисление
-- Если обе операции успешны:
COMMIT; -- Фиксация изменений
-- Если произошла ошибка:
ROLLBACK; -- Откат всех изменений в транзакции
Практическое значение:
- Управление конкурентным доступом: Решает проблемы «грязного» чтения, неповторяющегося чтения и фантомного чтения.
- Обеспечение целостности данных: Гарантирует, что бизнес-правила (например, сумма на счетах до и после перевода одинакова) не будут нарушены.
- Восстановление после сбоев: Журнал транзакций (WAL) позволяет восстановить данные.