Классическим примером является задача перевода денег в таблице платежей с одного счета на другой. Пусть необходимо снять некоторую сумму с одного счета и добавить ее на другой, т.е. провести платеж. Транзакция включает в себя две операции модификации, которые выполняются раздельно. Для решения можно использовать два способа:
· Заблокировать таблицу даже для чтения и выполнить две операции модификации, после чего снять блокировку, разрешая другим пользователям работать с таблицей;
· Объявить транзакцию на таблице и, выполнив требуемые действия, завершить транзакцию.
При использовании первого способа блокируется работа других пользователей с таблицей, что в системах с большим числом пользователей неприемлемо. Второй способ не имеет этого недостатка, но требует от системы транзакций поддержания согласованности по чтению, т.е. другие пользователи не должны видеть производимых изменений до полного завершения транзакции. В то же время, они должны иметь возможность читать данные из таблицы. Если система поддержки транзакций не может обеспечить согласованности по чтению, то возможно возникновение ситуации, когда сумма счетов по таблице будет отличаться от реальной (если читать таблицу в тот момент, когда деньги сняты с первого счета, но еще не занесены на второй).