ТранзакцииСредний
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 операций, выполняемых как единое целое: либо все успешно, либо ни одна.Уровень изоляцииОпределяет, насколько транзакция изолирована от изменений других транзакций.
Анекдоты по теме
— Что такое «фантомное чтение»? — Запускаешь SELECT дважды в транзакции, второй раз видишь новые строки. — Почему? — Другая транзакция вставила и закоммитила строки между двумя твоими SELECT. — Как избежать? — REPEATABLE READ или SERIALIZABLE.
DBA смотрит на лог: «Deadlock detected». — Кого убили? — Два UPDATE-а. Один держал стул, второй — стол. Никто не уступил. Пришлось убить обоих.
Разработчик открывает транзакцию в понедельник. Закрывает в пятницу. Таблица заблокирована всю неделю. В пятницу вечером приходит DBA с молотком.