【问题标题】:Do Postgres and Oracle databases maintain insertion order?Postgres 和 Oracle 数据库是否维护插入顺序?
【发布时间】:2016-08-29 12:32:36
【问题描述】:

我正在尝试存储一个集合(保留其元素的顺序)。我将遍历集合并将元素一一插入到数据库中。假设我想一一检索元素。我能否按照插入的顺序检索元素?

【问题讨论】:

  • 关系数据库中的行排序。如果您想按定义的顺序检索它们,您需要一个order by,因此需要一个您可以按其排序的列(例如,集合中的索引、自动增量列或时间戳)

标签: database oracle postgresql data-structures


【解决方案1】:

不,数据库表是面向堆的。所以理论上在单一写入器模式下,当所有行的大小相同时,这个“可以” 工作。但是,当您在某个页面中留出一些空闲空间,然后您插入较短的行时,它将被放入该页面中。

所以请不要相信任何数据库中的插入顺序。包括 MySQL。

【讨论】:

    【解决方案2】:

    不幸的是,事实并非如此。 如果要按顺序检索行,则应使用序列(如 Id 列,主键)和关于此 id 列的 order by 子句。

    Oracle 内置的 rowid 伪列包含行号信息;但你不应该依赖这个。表格可以启用行移动属性。

    【讨论】:

    猜你喜欢
    • 2011-09-18
    • 2016-02-27
    • 2011-10-25
    • 2014-10-09
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多