数据库表本质上是未排序的。没有
最后一行
在表格中。
如果有聚集索引,则记录的存储顺序与聚集索引相同,但这并不意味着这是行的顺序,除非指定
order by
子句中,任何数据库都不能保证所述查询返回的行的顺序。
从…起
Wikipedia page on tables
(重点矿山):
就数据库的关系模型而言,表可以被视为关系的方便表示,但两者并不是严格等价的。例如,SQL表可能包含重复的行,而真正的关系不能包含重复的元组。类似地,表表示意味着行和列的特定顺序,而关系则显式无序。然而
除非在查询表的SELECT语句中指定ORDER BY子句,否则数据库系统不保证行的任何排序。
参见Aaron Betrand的
Bad habits to kick : relying on undocumented behavior
,标题为“无订单订购人”的段落:
... 我想说得很清楚:除非使用ORDER BY子句,否则排序是任意的。在没有ORDER BY的查询中,您永远不应该依赖于所观察到的顺序,如果您真的不关心结果返回的顺序,那么只应该发出没有ORDER BY子句的查询。在这种情况下,您可以想象行每次都会以不同的随机顺序返回,尽管事实并非如此(随机的含义与任意性完全不同,但正如我所说,请想象一下)。