我有一个选择查询,用于选择流式传输数据。假设我运行了查询,数据计数为100;在检索数据时,还插入了几行,例如10行。现在我的问题是:select会返回100行还是110行?
答案 0 :(得分:2)
这在RDBMS环境中进入隔离状态。例如,在SQL Server中,如果我运行一个从表中选择所有COMMITTED数据的查询,并且当它有100行时,我将返回100行。如果当前正在插入此表并且尚未提交那些新行,我仍将返回100行(假设表未锁定)。我每次都要重新运行查询。结果集不仅会神奇地变大。每次要返回数据时都必须发出一个选择。
现在,如果我选择UNCOMMITTED数据并使用NOLOCK之类的东西,每次运行我的选择时,我都会返回尚未提交的记录。这意味着每次运行我的select时,当表接收新记录时,每次返回数据集时都会看到这些新记录。这有助于查看最新的记录,但如果由于任何原因导致事务失败或回滚,这可能导致脏读。