ЧТО ТАКОЕ ТРАНЗАКЦИЯ В БАЗЕ ДАННЫХ
🔎 Транзакция — это неделимая (атомарная) операция, которую вы можете произвести с базой.
Неделимая — это значит, что база рассматривает операцию как единое целое. Она или выполняется полностью, или не выполняется вообще.
При этом транзакция может содержать в себе несколько операций. Например, вы можете вставить несколько строк в базу, и всё это будет считаться единой транзакцией. В случае если произошла ошибка, и только часть строк была вставлена в базу, транзакция "откатится", то есть все внесённые изменения будут отменены.
Когда мы выполняем несколько операций в коде, в конце нужно сделать коммит (commit), то есть показать системе, что мы должны выполнить предыдущие операции как единое целое. Каноничный пример транзакции в реальном мире — перевод денег с одного счета на другой в банке. Как происходит перевод:
Система снимает деньги с одного счета.
Система добавляет деньги на другой счет.
Если бы операция перевода не являлась транзакцией, то в случае ошибки между 1 и 2 этапом деньги пропали бы безвозвратно.
На самом деле дело не только в защите от ошибок при удалении, но и, например, в защите от неконсистентности данных. Что это значит? Допустим, вы переводите деньги с одного счета на другой. Допустим, вы хотите заплатить с первого счёта в магазине. Если транзакция еще не завершила первый этап, вы можете случайно подумать (во время другой параллельно идущей операции снятия денег), что денег у вас больше, чем есть на самом деле.
Транзакции подчиняются принципу ACID:
📍Atomic (атомарность) — если произошел коммит, значит, все операции были выполнены;
📍Consistent (консистентность) — можно сделать коммит, только если он удовлетворяет всем ограничениям (например, NOT NULL);
📍Isolated (изолированность) — снаружи транзакции не видно, что происходит внутри, пока не произошел коммит;
📍Durable (долговечность) — независимо от ошибок в системе, транзакция, которая была совершена (то есть, был коммит) останется совершённой, даже если сразу после коммита сервер упадет.
Post #22
1.03K
- 👍 2