Видимость данных в транзакциях

Изображение s3men

Помогите разобраться с определением "транзакция". Вот пишется что при запросе к БД каждая транзакция видит как бы снимок данных (версию) на момент этого снимка, а не текущее состояние данных. Для данных которые изменяются в транзакции - да, их не видно извне. Но подтверждённые данные становятся видимыми этой транзакции. Таким образом если в транзакции сделать 2 запроса через некоторое время, то они вполне могут вернуть разный результат. И что же делать? Блокировать таблицы что ли?

тот же пример с банковским счетом :
- на счету 100 баксов
- открываем транзакцию, проверяем балланс - все хорошо. делаем долгую и нудную операцию вычисления, и снимаем по окончании со счета 50 баксов.
- А во время вычислений другая операция снимет 70 баксов и закончиться успешно.
И тут мы снимаем эти 50 баксов со счета. Итог : -20 баксов на счете.
Как же быть??

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Почитайте: http://postgresql.

Почитайте:
http://postgresql.ru.net/manual/tutorial-transactions.html
возможно что-либо станет более ясно.

А то что пишите вы - помоему логично. Ведь другая операция ничего не знает про 1-ю и работает с тем, что видит сама. Если вы хотите, чтобы никакая другая транзакция не могла изменить баланс счёта у конкретного лица - блокируйте запись в таблице для этого лица, что позволит получить вам эксклюзивный доступ. А транзакция всего лишь гарантирует, что все изменения, которые внесены в рамках этой транзакции либо будут внесены полностью, либо вообще никаких изменений внесено не будет.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023