Транзакция (TRANSACTION)
Группа SQL операций, выполняемых как единое целое: либо все успешно, либо ни одна.
BEGIN; -- операции COMMIT; -- или ROLLBACK;
Объяснение
Пример
-- Перевод денег между счетами BEGIN; UPDATE accounts SET balance = balance - 1000 WHERE id = 1; UPDATE accounts SET balance = balance + 1000 WHERE id = 2; COMMIT; -- Если что-то пошло не так: -- ROLLBACK;
Связанные термины
Анекдоты по теме
— Что такое advisory locks? — Пользовательские блокировки вне транзакций. — Пример? — SELECT pg_advisory_lock(12345); — захватить блокировку с ID 12345. — Зачем? — Распределённые mutex: только один воркер обрабатывает задачу с ID 12345. — Как Redis SETNX, но в PostgreSQL. — Именно, без Redis.
— Чем TRUNCATE отличается от DELETE? — DELETE логирует каждую строку и может быть в транзакции. — TRUNCATE удаляет всё разом, не логируя строки. Быстрее. — Но TRUNCATE нельзя откатить? — В PostgreSQL можно — TRUNCATE транзакционный. — В MySQL? — Там TRUNCATE автоматически фиксирует транзакцию. Осторожно.
— Что такое «потерянное обновление»? — Две транзакции читают одно значение, обе его изменяют, одно изменение теряется. — Пример? — Оба читают balance=100. Оба делают balance-10. Оба пишут 90. Должно быть 80. — Решение? — UPDATE balance = balance - 10 — атомарно. — Или SELECT FOR UPDATE. — Или SERIALIZABLE.