mysql如何对具有相同值的行进行排序

ati*_*ing 15 mysql sql-order-by

在我的数据库中,我有一些记录,我按照恰好相同的值进行排序:

| col1 | timestamp              |
| row1 | 2011-07-01 00:00:00    |
| row2 | 2011-07-01 00:00:00    |
| row3 | 2011-07-01 00:00:00    |

SELECT ... ORDER BY timestamp
Run Code Online (Sandbox Code Playgroud)

看起来结果是随机顺序.随机顺序是否一致.这意味着如果我在两个mysql服务器中有这些数据.我可以期待相同的结果吗?

Dam*_*ver 10

我建议不要做出这个假设.在标准SQL中,explicit ORDER BY子句不需要的任何内容都取决于实现.

我不能说MySQL,但是在例如SQL Server上,到目前为止"相等"的行的输出顺序ORDER BY可能会在每次查询运行时发生变化 - 并且可能受到几乎任何事情的影响(例如补丁/服务器的Service Pack级别,工作负载,当前位于缓冲池中的页面等).

因此,如果您需要特定订单,那么您可以做的最好的事情(保证它,并为未来的维护者记录您的查询)明确请求您想要的订单.

  • +1注意:查找另一列您可以作为第二个参数进行排序以获得一致的结果 (4认同)

spe*_*593 6

已有很多答案,但底线答案是否定的.

如果您希望以特定顺序返回的行一致,则在一个中指定ORDER BY.没有它,绝对没有保证将返回什么订单行.

我认为您可能缺少的是ORDER BY子句中可以列出多个表达式.并且您可以包含不在SELECT列表中的表达式.

例如,在您的情况下,您可以使用ORDER BY timestamp, id.

(或其他一些列或表达式.)

这将首先在时间戳上对行进行排序,然后对时间戳具有相同值的任何行将id按此排序,或者列表中的下一个表达式.