Транзакции
Синтаксис
BEGIN;
INSERT INTO accounts (id, balance) VALUES (1, 100);
UPDATE accounts SET balance = balance - 50 WHERE id = 1;
UPDATE accounts SET balance = balance + 50 WHERE id = 2;
COMMIT; -- или ROLLBACK
Как это устроено
Транзакции реализованы через журнал компенсирующих действий: каждая мутация записывает обратную операцию (INSERT → DELETE, UPDATE → восстановление предыдущего состояния строки, DELETE → повторная вставка). ROLLBACK проигрывает журнал в обратном порядке.
Это не MVCC — текущая модель ближе к read-committed, без снапшот-изоляции. Но ROLLBACK честно откатывает все изменения сессии, а WAL с fsync на каждом commit гарантирует, что закоммиченная транзакция переживёт любой сбой процесса (kill, SIGTERM, отключение питания).
Writer-сериализация
Запись в базу сериализуется по SQLite-подобной модели: db-wide writer lock с режимами DEFERRED/IMMEDIATE — конкурентные writer'ы не переплетаются, что упрощает рассуждения о консистентности за счёт последовательной записи.
Похожие страницы
← Назад
Функции и выраженияДалее →
HTTP API