Задать вопрос
@yourisus

Почему незафиксированная транзакция может изменять данные?

17d22f2acb1d4dfd835b6b8d7b7967b9.png
Собственно вопрос - почему транзакция, которая не завершена(commit), способна менять данные в кеше, а не создавать копию обьекта или хотя бы копию измененной части.
Вот у нас есть ситуация как на скрине:
1) Почему нельзя проверить действия на целостность и корректность, а потом после утверждения(commit) изменить данные? Создать локальную А, записать в нее, после утверждения, записать в ту, что в кеше, тем самым исчезнет, проблема "грязных данных".
2) Каким образом, после всех действий даже после перезаписи А, мы получили rollback?(как я понимаю, если А перезаписано, то бд как бы фактически проверила на целостность и тп.)
3) Расскажите, кто отдает конечное "зафиксировать\откатить"?
Ну или укажите на ошибки, может я чего-то не догнал...
  • Вопрос задан
  • 184 просмотра
Подписаться 2 Оценить 6 комментариев
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Читайте далее. Это, судя по всему, прелюдия к описанию уровней изоляции транзакций.
READ UNCOMMITTED - позволяет СУБД показывать данные, которые ещё не были зафиксированы. Это не значит, что именно так на этом уровне изоляции должна так себя вести СУБД, но поведение допускается стандартом для этого уровня изоляции. Например, в упомянутом postgresql на шаге t4 900 вы не сможете получить никогда, даже на read uncommitted.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bnytiki
Далеко не всегда важны "чистые" данные, бывает, что важнее скорость.

Вот два примера:

Например, какая вам принципиальная разница - будет на 1 лайк больше или нет?
С другой стороны, при банковских операциях мелочи важны.

Чем "чище" тем выше нагрузка на СУБД.
Поэтому иногда ОСОЗНАНО снижают "чистоту".
Ответ написан
Комментировать
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы