Зачем вставлять блок операторов TSQL, если уровень изоляции транзакции для другой транзакции сериализуем с помощью неконфликтующего фильтра?
Сериализуемые уровни изоляции транзакций устраняют проблему фантомного чтения, блокируя любые вставки в таблицу в транзакции, которые конфликтуют с любыми операторами выбора в других транзакциях. Я пытаюсь понять это на примере, но он блокирует вставку, даже если фильтр в операторе выбора не конфликтует. Буду признателен за любое объяснение того, почему он так себя ведет.
Скрипт таблицы
CREATE TABLE [dbo].[dummy](
[firstname] [char](20) NULL,
[lastname] [char](20) NULL
) ON [PRIMARY]
GO
Сессия - 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran
select * from dummy where firstname = 'abc'
Сессия - 2
insert into dummy values('lmn', 'lmn') -- Why this blocks?