Почему SQL Server считывает незафиксированные данные, когда уровень изоляции по умолчанию READ COMMITTED? - PullRequest
0 голосов
/ 17 октября 2019

У вас есть таблица dbo.inventory, а itemsInStock равно 10.

Допустим, вы выполняете этот запрос:

begin tran

update dbo.inventory
set itemsInStock = 5 
where ID = 1

select * from dbo.inventory

(и вы не совершаете транзакцию)

Почему SQL Server читает 5, если он еще не зафиксирован и изоляция по умолчанию считывается зафиксированной?

1 Ответ

2 голосов
/ 17 октября 2019

Очевидно, что транзакция должна видеть все, что она изменила.

В этом случае SELECT и UPDATE выполняются в одной и той же транзакции, и поэтому изменения видны текущей транзакции (которая внесла изменения).

Изоляция применяется к другим транзакциям, которые читают из этой таблицы.

...