【问题标题】:Is 'LIMIT OFFSET' stable when new element inserted?插入新元素时“LIMIT OFFSET”是否稳定?
【发布时间】:2015-11-21 04:47:24
【问题描述】:

让我们考虑一个场景。

一个表有 1000 行。

我用 LIMIT 100 查询了行。

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

然后,我再次查询,使用 LIMIT 100 和 OFFSET 100。

我希望结果与第一个查询无关。

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

我该怎么做?请帮忙。

【问题讨论】:

    标签: sql limit offset


    【解决方案1】:

    SQL 标准没有承诺表中行的自然排序 - 新行可以插入到表的末尾或中间的任何位置。根据您的 dbms 插入行的位置(这可能取决于之前删除了哪些行),您的第二个查询可以轻松选择第一个查询中已选择的行,或者在查询之间跳过一些行。

    我能想到的唯一可靠的方法是将整个表选择到一个临时表或游标中,然后从第二个记录集中一次读取 100 条记录。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2011-03-20
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2020-08-17
      相关资源
      最近更新 更多