Существует две транзакции, T1 и T2.
T2 выполняет:
установить уровень изоляции транзакции REPEATABLE READ
begin Transaction
select * from [MyValues]
Затем T1 выполняет:
установить уровень изоляции транзакции READ UNCOMMITTED
начать транзакцию
обновление [MyValues] set [Content] = 'A1-change', где [Id] = 1
и блоки T1 (поскольку T2 установил эксклюзивную блокировку записи).
Теперь t2 выполняет:
update [MyValues] set [Content] = 'A2-change' где [Id] = 1
и, к моему удивлению, возникает тупик.
Почему это так? Разве T2 уже не должен иметь права на чтение / запись к записи по определению REPEATABLE READ? Я ожидал, что T2 обновит запись, а затем T1 обновит запись.
Таблица и определение данных следующие:
CREATE TABLE MyValues ([ID] int, [Content] varchar ( 255),);
INSERT INTO [MyValues] ([id], [Content]) VALUES (1, 'A');