Что такое транзакция.
Транзакция – группа последовательных SQL команд в базе данных, которые выполняются как один логический блок. SQL команды, входящие в транзакцию, должны быть либо все выполнены в случае успеха, либо все отменены. Транзакции необходимы для работы в многопользовательском режиме, т.к. могут выполняться параллельно и независимо от других транзакций.
Классический пример диаграммы транзакции банковского перевода представлен на следующем рисунке. Если деньги списались со счета № 1, они должны быть обязательно зачислены на счет № 2. В случае каких-то сбоев, операция полностью отменяется.
В конце 70-х годов прошлого века Джимом Греем были сформулированы требования, которым должны удовлетворять транзакции. Этот набор требований называют ACID (Atomicity, Consistency, Isolation, Durability).
- Atomic (атомарность) гарантирует, что транзакция не будет выполнена частично. Т.е. команды, входящие в транзакцию, либо все выполняются успешно, либо все отменяются, при этом система (база данных) вернется в исходное состояние.
- Consistent (согласованность) означает, что база данных находится в согласованном состоянии перед началом транзакции, и останется в согласованном состоянии по окончании транзакции.
- Isolated (изолированность) означает, что одна выполняемая транзакция не оказывает влияния на другую выполняемую транзакцию.
- Durable (надежность) значит, что все изменения, сделанные в успешно завершенной транзакцией, должны быть гарантированно сохранены в базе данных. Т.е. независимо от каких-либо проблем с оборудованием, сетью и т.п, если пользователь получил подтверждение, что транзакция завершена, все изменения действительно успешно сохранены.