Причина тупика - PullRequest
       71

Причина тупика

0 голосов
/ 19 февраля 2020

Существует две транзакции, 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');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...