【发布时间】:2020-01-19 20:22:21
【问题描述】:
This answer 声称事务对于多个读取语句也很有用。下面的测试用例是错误的还是需要相关表才能返回一致的结果?
在控制台 #1 中执行以下命令:
set transaction isolation level serializable;
begin transaction;
select * from TableA;
waitfor delay '00:00:15';
select * from TableB;
commit transaction;
在控制台 #2 中,在这 15 秒的窗口中,执行以下操作:
set transaction isolation level serializable;
begin transaction;
insert into TableB(col) values('b');
commit transaction;
15 秒后,控制台#1 返回一行,其中包含'b'。为什么?我认为控制台 #1 不会返回任何结果,或者事务 #1 会中止,因为 TableB 已被修改。
我已经在 Windows 上试用过 SQL Server LocalDB 2017,在 Linux 上试用过 SQL Server 2019 RC1。我使用 DataGrip 运行我的 sql 命令,但我使用 Entity Framework 6 的原始用例。
【问题讨论】:
-
我有 SQL Server 2014,但我没有在控制台 #1 中获得插入的记录 (b)
-
@PeterHe:你用哪个工具来运行命令?我尝试了带有高级服务和 SSMS 2018 的 SQL Server 2017 Express,但仍然获得了记录
b。 -
我使用SSMS作为客户端,连接到SQL server 2014 server
标签: sql sql-server transactions isolation-level transaction-isolation