26. Transactions & ACID
Atomicity, Consistency, Isolation, Durability.
ACID свойства
Заголовок раздела «ACID свойства»Atomicity (Атомарность)
Заголовок раздела «Atomicity (Атомарность)»Всё или ничего.
BEGIN;UPDATE accounts SET balance = balance - 100 WHERE id = 1;UPDATE accounts SET balance = balance + 100 WHERE id = 2;COMMIT; -- Обе операции или ни однаConsistency (Консистентность)
Заголовок раздела «Consistency (Консистентность)»Данные всегда валидны.
ALTER TABLE accounts ADD CONSTRAINT positive_balance CHECK (balance >= 0);
-- Транзакция откатится, если баланс станет отрицательнымIsolation (Изоляция)
Заголовок раздела «Isolation (Изоляция)»Транзакции не влияют друг на друга.
-- Transaction 1BEGIN;UPDATE accounts SET balance = balance - 100 WHERE id = 1;-- ещё не COMMIT
-- Transaction 2 не видит изменений Transaction 1SELECT balance FROM accounts WHERE id = 1; -- старое значениеDurability (Долговечность)
Заголовок раздела «Durability (Долговечность)»После COMMIT данные сохранены навсегда (даже при сбое).
Уровни изоляции
Заголовок раздела «Уровни изоляции»-- READ UNCOMMITTED (самый слабый)SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- READ COMMITTED (по умолчанию в PostgreSQL)SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- REPEATABLE READSET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SERIALIZABLE (самый строгий)SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;Следующий урок: Prisma ORM →