← Назад к вопросам
Расскажи как связаны транзакции и 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 — фундамент надёжности БД. Без него деньги теряются, данные грязные, отчёты неправильные.