Sql 单个事务中的多个读取查询

Sql 单个事务中的多个读取查询,sql,sql-server,transactions,isolation-level,transaction-isolation,Sql,Sql Server,Transactions,Isolation Level,Transaction Isolation,声称一个事务对于多个read语句也很有用。下面的测试用例是否有错误,或者是否需要相关的表来返回一致的结果 在控制台1中执行以下操作: 将事务隔离级别设置为可序列化; 开始交易; 从表格A中选择*; 等待延迟'00:00:15'; 从表B中选择*; 提交事务; 在控制台2中,在15秒钟的窗口内,执行以下操作: 将事务隔离级别设置为可序列化; 开始交易; 在TableBcol值中插入'b'; 提交事务; 15秒后,控制台1返回一行,其中包含“b”。为什么?我认为控制台1不会返回任何结果,或者事务1会

声称一个事务对于多个read语句也很有用。下面的测试用例是否有错误,或者是否需要相关的表来返回一致的结果

在控制台1中执行以下操作:

将事务隔离级别设置为可序列化; 开始交易; 从表格A中选择*; 等待延迟'00:00:15'; 从表B中选择*; 提交事务; 在控制台2中,在15秒钟的窗口内,执行以下操作:

将事务隔离级别设置为可序列化; 开始交易; 在TableBcol值中插入'b'; 提交事务; 15秒后,控制台1返回一行,其中包含“b”。为什么?我认为控制台1不会返回任何结果,或者事务1会中止,因为TableB被修改了


我在Windows上尝试了SQL Server LocalDB 2017,在Linux上尝试了SQL Server 2019 RC1。我使用DataGrip运行sql命令,但我使用Entity Framework 6的原始用例。

console 1执行会针对TableB返回“b”记录,因为console 2会在console 1中的TableB选择查询之前在TableB中添加记录。事务仅锁定已执行查询中存在的表。 如果在选择TableB之后等待添加,控制台1将不会获取“b”记录。
如果表的结构发生了更改,如在选择查询之前删除列并添加新列,但未使用*号,则查询将中止。如果所选查询中不存在按名称显示的Drop列,则不会生成错误。

我有SQL Server 2014,但在console中未获取插入的记录b1@PeterHe:您使用哪个工具运行命令?我尝试了使用高级服务的SQL Server 2017 Express和SSMS 2018,但仍然获得了记录b。我使用SSMS作为客户端并连接到SQL Server 2014 Server