首页 > 解决方案 > 选择查询在 SQL 中的工作原理

问题描述

我有一个选择查询,可以选择流式传输数据。假设我运行查询并且数据计数为 100;在检索数据时,会插入更多行,例如再插入 10 行。现在我的问题是:选择会返回 100 行还是 110 行?

标签: sql

解决方案


这进入 RDBMS 环境中的隔离。例如,在 SQL Server 中,如果我运行一个从表中选择所有 COMMITTED 数据的查询,并且当它有 100 行时,我将返回 100 行。如果当前正在插入此表并且尚未提交这些新行,我仍将返回 100 行(假设表未锁定)。我每次都必须重新运行查询。结果集不仅会神奇地变大。每次要返回数据时都必须发出选择。

现在,如果我选择 UNCOMMITTED 数据并使用 NOLOCK 之类的东西,每次运行我的选择时,我都会返回尚未提交的记录。这意味着每次我运行我的选择时,当表接收新记录时,每次返回我的数据集时我都会看到这些新记录。这有助于在最新记录进入时查看它们,但是如果由于任何原因事务失败或回滚,这可能会导致脏读。


推荐阅读