Помогите разобраться с определением "транзакция". Вот пишется что при запросе к БД каждая транзакция видит как бы снимок данных (версию) на момент этого снимка, а не текущее состояние данных. Для данных которые изменяются в транзакции - да, их не видно извне. Но подтверждённые данные становятся видимыми этой транзакции. Таким образом если в транзакции сделать 2 запроса через некоторое время, то они вполне могут вернуть разный результат. И что же делать? Блокировать таблицы что ли?
тот же пример с банковским счетом :
- на счету 100 баксов
- открываем транзакцию, проверяем балланс - все хорошо. делаем долгую и нудную операцию вычисления, и снимаем по окончании со счета 50 баксов.
- А во время вычислений другая операция снимет 70 баксов и закончиться успешно.
И тут мы снимаем эти 50 баксов со счета. Итог : -20 баксов на счете.
Как же быть??
Почитайте: http://postgresql.
Почитайте:
http://postgresql.ru.net/manual/tutorial-transactions.html
возможно что-либо станет более ясно.
А то что пишите вы - помоему логично. Ведь другая операция ничего не знает про 1-ю и работает с тем, что видит сама. Если вы хотите, чтобы никакая другая транзакция не могла изменить баланс счёта у конкретного лица - блокируйте запись в таблице для этого лица, что позволит получить вам эксклюзивный доступ. А транзакция всего лишь гарантирует, что все изменения, которые внесены в рамках этой транзакции либо будут внесены полностью, либо вообще никаких изменений внесено не будет.