为什么REPEATABLE READ没有看到新行?

时间:2018-01-31 09:18:03

标签: sql-server isolation-level

我认为REPEATABLE READ不应该接收已更改的数据,但应该接收新数据。

但是我有以下脚本:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

create table testLocking(a int);

BEGIN TRANSACTION
    insert into testLocking values (1);
    select * from testLocking;
    WAITFOR DELAY '000:00:30';
    select * from testLocking;
COMMIT TRANSACTION;


BEGIN TRANSACTION    
    insert into testLocking values (2);
    UPDATE testLocking SET A=4 WHERE a=1;
    select * from testLocking;
    WAITFOR DELAY '000:00:40';
COMMIT TRANSACTION;

drop table testLocking;

我得到了结果:

1

1

4
2

我在期待:

1

1
**2**

2
4

有谁能看到我做错了什么?

已更新

我希望能够通过同时运行查询来查看事务隔离级别的影响。

1 个答案:

答案 0 :(得分:0)

可重复读取意味着其他事务所做的更改不会反映在您的查询中。您的代码会在同一事务中进行更改。

<强>已更新

单个脚本无法显示与数据库交互的两个事务的影响。在SSMS中执行此操作的最佳方法是将代码分成两个窗口。使用Window并排打开它们 - &gt;新的垂直选项卡组。

通过一次突出显示一行,您可以同时运行事务,并且您将在每个窗口中看到查询的效果。

enter image description here