【问题标题】:MySQL incorrect orderingMySQL 不正确的排序
【发布时间】:2018-05-14 15:30:03
【问题描述】:

我有一个表格,例如:id |姓名 |日期添加

有内容:

1| Mark | 2018-02-01 10:00:00

2| Andrew | 2018-02-01 10:00:00

当我尝试执行此请求时:select * from table order by date_add

我按下一个顺序获得行:2, 1

发生在 Percona MySQL docker 中

在我的主机上使用相同的 Percona,我得到了 1、2 个订单

如何在我的主机上启用 Docker 中的逻辑?

【问题讨论】:

  • 两个记录的日期相同...在这种情况下,您可以期望没有排序。如果您需要在两个日期相同时确保订单,请添加Order BY date_add, id
  • @JNevill 没有默认的主键排序吗?
  • 由于在这种情况下date_add 字段是相同的值,因此排序有些随意,并且在不同的实现中可能会出现不同的结果。你有什么要求?如果date_add 相同,您是否要求id 按升序排列?如果是这样,只需指定:select * from table order by date_add, id。没有默认排序。
  • 没有。在任何 RDBMS 中都没有默认排序。必须始终指定。
  • @arturios 这里没有什么奇怪的。超出 ORDER BY 子句指定的顺序未定义。任何实现都可以随心所欲。

标签: mysql docker percona


【解决方案1】:

除非在 ORDER BY 子句中指定,否则行排序是不确定的。没有您应该期望获得的默认排序(或子排序)。

在这种情况下,您应该指定一个排序子句:

ORDER BY date_add, id

这种行为可能会受到 Percona 或 Docker 的影响,但同样,您不应该期望出现任何明显的“默认”顺序,即使是在相隔几分钟的查询之间。另见What is the default Order By of queries?

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2021-11-26
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多