可序列化的事务隔离级别通过阻止对事务中与任何其他事务中的任何select语句冲突的表的任何插入来避免幻像读取的问题.我试图用一个例子来理解它,但即使select语句中的过滤器没有冲突,它也会阻塞插入.我会很感激为什么它以这种方式行事的任何解释.
表脚本
CREATE TABLE [dbo].[dummy](
[firstname] [char](20) NULL,
[lastname] [char](20) NULL
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
会议 - 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran
select * from dummy where firstname = 'abc'
Run Code Online (Sandbox Code Playgroud)
会议 - 2
insert into dummy values('lmn', 'lmn') -- Why this blocks?
Run Code Online (Sandbox Code Playgroud)