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

Расскажи как связаны транзакции и ACID

1.7 Middle🔥 171 комментариев
#SQL и базы данных

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

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

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

Как связаны транзакции и ACID

Краткий ответ

Транзакция — набор операций БД, выполняемых либо все вместе, либо ничего.

ACID — гарантии БД о выполнении транзакций:

  • Atomicity (все или ничего)
  • Consistency (согласованное состояние)
  • Isolation (не мешают друг другу)
  • Durability (на диске)

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

Либо ВСЕ операции, либо НИ ОДНА:

BEGIN TRANSACTION;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;  -- Если сбой — оба откатываются

Consistency (Согласованность)

БД переходит из одного согласованного состояния в другое:

CREATE TABLE accounts (
    id INT PRIMARY KEY,
    balance DECIMAL(10,2) CHECK (balance >= 0)
);
-- Constraint защищает целостность

Isolation (Изоляция)

Параллельные транзакции не мешают друг другу:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- Уровни: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE

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

Когда COMMIT завершился — данные на диске:

SET synchronous_commit = ON;  -- Ждёт fsync (по умолчанию)
-- COMMIT не вернёт управление пока WAL не написан на диск

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

-- Платёжная система (правильно)
BEGIN TRANSACTION;
  SELECT * FROM accounts WHERE id IN (1, 2) FOR UPDATE;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  INSERT INTO transactions VALUES (1, 2, 100, SUCCESS);
COMMIT;  -- Либо всё успешно, либо весь ROLLBACK

В распределённых системах (CAP Theorem)

Не можешь иметь все три:

  • Consistency (согласованность)
  • Availability (доступность)
  • Partition tolerance (устойчивость)

PostgreSQL выбирает CP (consistency + partition tolerance).

Итог

ACID — фундамент надёжности БД. Без него деньги теряются, данные грязные, отчёты неправильные.