ТранзакцииСредний
ACID
Четыре свойства надёжных транзакций: Atomicity, Consistency, Isolation, Durability.
Синтаксис
BEGIN; ... COMMIT; -- ACID гарантируется
Объяснение
ACID — фундаментальные гарантии реляционных СУБД:
Atomicity (Атомарность): транзакция — неделимая единица. Либо все операции выполнены, либо ни одна.
Consistency (Согласованность): транзакция переводит базу из одного корректного состояния в другое. Нарушение constraints → откат.
Isolation (Изолированность): параллельные транзакции не видят незакоммиченных изменений друг друга.
Durability (Долговечность): после COMMIT данные сохранены даже при сбое (за счёт WAL).
Пример
-- Пример нарушения без транзакции: -- Списали деньги с одного счёта, сервер упал — деньги пропали. -- С транзакцией: BEGIN; UPDATE acc SET balance = balance - 500 WHERE id = 1; UPDATE acc SET balance = balance + 500 WHERE id = 2; COMMIT; -- оба UPDATE применятся, или ни один
Связанные термины
Deadlock (взаимная блокировка)Ситуация, когда две транзакции ждут блокировок друг друга и не могут продолжить.Транзакция (TRANSACTION)Группа SQL операций, выполняемых как единое целое: либо все успешно, либо ни одна.Уровень изоляцииОпределяет, насколько транзакция изолирована от изменений других транзакций.
Анекдоты по теме
DBA заказывает кофе: — Один эспрессо. Без COMMIT. Я пока подумаю.
— Почему база данных грустит на свидании? — Потому что она всё время ждёт COMMIT. А он всё не приходит и не приходит. А без COMMIT никаких отношений дальше первого свидания.
— Что такое «потерянное обновление»? — Две транзакции читают одно значение, обе его изменяют, одно изменение теряется. — Пример? — Оба читают balance=100. Оба делают balance-10. Оба пишут 90. Должно быть 80. — Решение? — UPDATE balance = balance - 10 — атомарно. — Или SELECT FOR UPDATE. — Или SERIALIZABLE.