У меня есть один вопрос о транзакциях. Надеюсь, это не дубликат, я долго искал и ничего полезного не нашел. Итак, я недавно узнал о database transactions
и read uncommitted
.
Может ли транзакция (или простой запрос) считывать грязные данные из инструкции DML
, которая все еще выполняется?
Например, у меня есть таблица R (A) с кортежами ({1}, {2}) и двумя транзакциями:
T1: UPDATE R SET A=A*2;
T2: SELECT AVG(R) FROM R;
Мы предполагаем, что T2 ISOLATION LEVEL
равно READ UNCOMMITTED
.
Есть ли вероятность, что T2
будет считывать грязные данные из T1
, даже если это еще не конец? Например, T1 обновляется в момент исполнения T2
только первым tuple
(R становится сейчас ({2}, {2} или ({1} , {4}))?
Как транзакция выполняется в подобных ситуациях?