插入新元素时 'LIMIT OFFSET' 是否稳定?

Is 'LIMIT OFFSET' stable when new element inserted?

让我们设想一个场景。

一个 table 中有 1000 行。

我查询了 LIMIT 100 行。

查询后,在table中插入了一些行。

然后,我又查询了一遍,LIMIT 100,OFFSET 100。

我希望结果独立于第一个查询。

我想要第一个查询后的结果。

我该怎么做?请帮忙。

SQL 标准不保证 table 中行的自然排序 - 新行可以插入 table 的末尾或中间的任何位置。根据您的 dbms 插入行的位置,这可能取决于之前删除的行,您的第二个查询可以很容易地 select 行已经 select 在第一个查询中编辑,或者在查询之间跳过一些行。

我认为可靠地做你想做的唯一方法是 select 整个 table 到临时 table 或游标,然后读取记录 100 在来自第二个记录集的时间。

您也可以在单个可序列化事务中执行所有查询(这将隐藏其他用户在您的事务期间执行的任何插入或删除),但即使那样也不是万无一失的解决方案。