3

所以我在数据库中有一堆记录,它们有一个 Date_Created 列,但大多数行都有零数据。

+-----+---------------------+--
| id  | Date_Created        | Other_Fields...
+-----+---------------------+--
| 2   | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 34  | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 56  | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| ... | ...                 | ...
+-----+---------------------+--

有些行包含此列的非零数据,但这些行目前不是我关心的行。

我想知道的是,为什么当我订购数据by Date_Created asc时,行会以我没想到的方式返回。这就是 ID 的排序方式。

256
512
1024
1280
1536
257
513
1025
1281
1537
2049
2
258
514
1026
1282
1538
3
259
515
1027
1283
1539
4
260
...

(256 的倍数)+n,其中 Date_Created 本质上是 0,对于整个事情。

这只发生在我select * from table order by Date_Created. 如果选择单个列 ( select id, Date_Created...),则 ID 会按顺序排列。

为什么会这样?

4

1 回答 1

2

如果您按日期排序,mysql 将完全做到这一点。如果所有日期都“相等”,则 mysql 不关心具有相同日期的元素内部的顺序。(因为它没有被告知,这样做!)

然后结果称为“未定义”。这很可能取决于mysql用来获取结果的(多个)线程。结果也可能因调用而异。

因此,如果您想确保对 SAME 数据的 SAME 调用具有相同的顺序 - 始终按id最后排序。

select * from table order by Date_Created, id

于 2013-08-14T17:31:21.467 回答