Теория· 6 мин· 10 XP
Зачем нужны транзакции: сценарий без них
Представьте: система обработала первый UPDATE, но сервер упал
до второго. Без транзакции это приводит к несогласованности данных.
Без транзакции — деньги пропали
sql
-- Шаг 1: деньги списаны ✓
UPDATE accounts SET balance = balance - 5000 WHERE id = 1;
-- 💥 Сбой сервера
-- Шаг 2: деньги НЕ зачислены ✗
UPDATE accounts SET balance = balance + 5000 WHERE id = 2;
После перезапуска: у Ивана −5000, у Марии без изменений. Деньги исчезли.
С транзакцией — всё или ничего
sql
BEGIN;
UPDATE accounts SET balance = balance - 5000 WHERE id = 1;
-- 💥 Сбой сервера
-- PostgreSQL автоматически откатывает BEGIN...незавершённую транзакцию
-- После перезапуска: данные как до BEGIN
Транзакция гарантирует
- Если
COMMITпрошёл — данные сохранены навсегда - Если
COMMITне дошёл — всё откатывается, как будто ничего не было
Наш датасет
В таблицах accounts и transfers хранится результат транзакций:
status = 'committed'— транзакция зафиксирована, балансы изменилисьstatus = 'rolled_back'— транзакция отменена, балансы не изменилисьstatus = 'pending'— транзакция ещё не завершена
Прочитайте урок до конца — прогресс засчитается автоматически