Mysql

MySQL 中 SELECT 語句的預設記錄順序是什麼?

  • June 11, 2021

假設您有以下表格和數據:

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預設如何對記錄進行排序?

重新發布對有關 SQL Server 的類似問題的回答:

在 SQL 世界中,順序不是一組數據的固有屬性。因此,除非您使用 ORDER BY 子句查詢數據,否則您的 RDBMS 無​​法保證您的數據將按特定順序返回——甚至是一致的順序。

所以,回答你的問題:

  • MySQL 根據需要對記錄進行排序,但沒有任何一致性保證。
  • 如果您打算依賴此訂單進行任何操作,則必須使用 指定所需的訂單ORDER BY。做任何其他事情都是在為不受歡迎的意外做好準備。

這是所有 SQL 的屬性,而不僅僅是 MySQL。SQL-92 規範中的相關文本是:

如果未指定 <order by 子句>,則 Q 的行的順序取決於實現。

游標規範中有類似的文本位。

引用自:https://dba.stackexchange.com/questions/6051