一尘不染

MySQL 中 SELECT 语句的默认记录顺序是什么?

mysql

假设您有以下表格和数据:

create table t (
    k int,
    v int,
    index k(k)
    ) engine=memory;

insert into t (k, v)
values (10, 1),
       (10, 2),
       (10, 3);

select * from t where k = 10无子句发出时order by,MySQL默认如何对记录进行排序?


阅读 63

收藏
2022-10-09

共1个答案

一尘不染

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

所以,回答你的问题:

  • MySQL 根据需要对记录进行排序,但没有任何一致性保证。
  • 如果您打算依赖此订单进行任何操作,则必须使用 指定所需的订单ORDER BY。做任何其他事情都是在为不受欢迎的意外做好准备。

这是所有 SQL 的属性,而不仅仅是 MySQL。SQL-92 规范中的相关文本是:

如果未指定 ,则 Q 的行的顺序取决于实现。

游标规范中有类似的文本位。

2022-10-09