【问题标题】:what is the default order for a simple SELECT in a MySQL table with AUTO_INCREMENT column [duplicate]具有 AUTO_INCREMENT 列的 MySQL 表中简单 SELECT 的默认顺序是什么[重复]
【发布时间】:2013-04-14 18:48:28
【问题描述】:

我有一个带有 AUTO_INCREMENT 列 (id_mt) 的表 (mytable)。当我做一个像

这样的简单查询时
SELECT * FROM mytable;

结果按 AUTO_INCREMENT 列排序,如

SELECT * FROM mytable order by id_mt;

所以我的问题是:当您不使用“order by”并且如果您有 AUTO_INCREMENT 列时,结果顺序的规则(如果有)是什么?

对于一些参考其他帖子的人来说清楚:我不使用

ALTER TABLE mytable ORDER BY sort_order ASC;

很明显,当您使用 ORDER BY 查询时,此查询只会改变性能。 我的问题更多的是“AUTO_INCREMENT 是否改变(强制?)简单 SELECT 的顺序?”

【问题讨论】:

  • 通常,这取决于文件的写入位置。
  • @MarcinJuraszek 没有这篇文章是关于'sort_order'的默认顺序

标签: mysql sql sql-order-by


【解决方案1】:

来自DBA Stack Exchange site

在 SQL 世界中,顺序不是一组数据的固有属性。因此,除非您使用 ORDER BY 子句查询数据,否则您的 RDBMS 无法保证您的数据将按特定顺序返回 - 甚至是一致的顺序。

  • 因此,为了回答您的问题,MySQL 会根据需要对记录进行排序,但不保证一致性。
  • 如果您只是对 MySQL 的内部结构感到好奇,Rolando 提供了一个有趣的答案。
  • 另一方面,如果您打算依赖此订单来处理任何事情,您必须使用ORDER BY 指定您想要的订单。做任何其他事情都是在为不受欢迎的意外做好准备

【讨论】:

  • 当然,我知道理论:'如果你想要 ORDER BY,总是使用 ORDER BY'。我只是对内部排序很好奇,主要是当你有一个 AUTO_INCREMENT 列时。
猜你喜欢
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2010-12-29
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
相关资源
最近更新 更多