Что такое транзакция?
Транзакция представляет собой определяемую приложением единицу работы, производимой в базе данных. Начинается выполнение транзакции, в базе данных происходят изменения, а затем производится закрепление транзакции (commit) или производится ее откат (roll back). Как только транзакция будет закреплена, изменения, которые были произведены транзакцией, станут видимыми для других пользователей и приложений.
Транзакции обладают следующими стандартными свойствами «ACID», в которых пользователи и приложения могут быть уверены.
Атомарны — транзакция обладает поведением по типу «все или ничего». Если транзакция закрепляется (фиксируется), то в базе данных будут применены все произведенные в ней изменения. Если будет произведен ее откат, то никакие изменения не будут применены.
Непротиворечивы — транзакция оставляет базу данных в непротиворечивом состоянии.
Сериализуемы — изменения, производимые в рамках транзакции, могут быть изолированы от других транзакций до тех пор, пока данная транзакция не закрепит эти изменения. Другие пользователи не могут видеть действий, производимых в рамках работы транзакции, пока она находится в состоянии выполнения.
Долговечны — как только транзакция будет закреплена, результаты ее работы будут постоянны.
Для реализации этих свойств СУБД используют различные механизмы блокировок: это производится для того, чтобы несколько транзакций, производимые параллельно, не влияли друг на друга или были изолированы.