ТранзакцииСредний
Транзакция (TRANSACTION)
Группа SQL операций, выполняемых как единое целое: либо все успешно, либо ни одна.
Синтаксис
BEGIN;
-- операции
COMMIT; -- или ROLLBACK;Объяснение
Транзакция гарантирует свойства ACID:
- Atomicity: всё или ничего
- Consistency: база остаётся в корректном состоянии
- Isolation: транзакции не видят незакоммиченных изменений друг друга
- Durability: после COMMIT данные сохранены
В PostgreSQL каждый отдельный запрос автоматически в транзакции (autocommit).
Пример
-- Перевод денег между счетами
BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
COMMIT;
-- Если что-то пошло не так:
-- ROLLBACK;Связанные термины
ACIDЧетыре свойства надёжных транзакций: Atomicity, Consistency, Isolation, Durability.Deadlock (взаимная блокировка)Ситуация, когда две транзакции ждут блокировок друг друга и не могут продолжить.SAVEPOINTТочка сохранения внутри транзакции. Позволяет откатиться к ней, не отменяя всю транзакцию.Уровень изоляцииОпределяет, насколько транзакция изолирована от изменений других транзакций.
Анекдоты по теме
— Что такое ACID? — Atomicity: всё или ничего. — Consistency: база всегда в корректном состоянии. — Isolation: транзакции не видят незакоммиченных изменений друг друга. — Durability: после COMMIT данные сохранены даже при сбое. — Это гарантии, не функции.
DBA заказывает кофе: — Один эспрессо. Без COMMIT. Я пока подумаю.
— Почему важно закрывать курсоры? — Открытый курсор держит транзакцию и память. — Что будет, если не закрыть? — При тысяче открытых курсоров база начнёт задыхаться. — Как с файловыми дескрипторами? — Точная аналогия.