【问题标题】:Mysql inserts in the middle instead at the end of tableMysql 在中间插入而不是在表的末尾
【发布时间】:2019-08-17 01:11:47
【问题描述】:

我是数据库新手。我从数据库表中删除了几行(直到表末尾)。现在每次我通过 php 执行 INSERT 查询时,它都会在最后一个删除的行之后立即插入新行,并将之前的插入向下推一行。

如上图所示,通过查询从2019-08-18(红色矩形)删除行: DELETE FROM mytable WHERE date > '2019-08-18'

现在新插入的顺序错误,如上图绿色矩形所示。虽然日期为 2019-08-19 的行先插入,但它被推到了表的末尾。

我做错了什么?

【问题讨论】:

  • ORDER BY id? ORDER BY date? id 的顺序正确(43 到 48)。如果您需要按特定顺序排列的行,您应该定义顺序。
  • 不要依赖数据库来订购您喜欢的东西。在拉取、组织或查看数据时使用 ORDER BY 子句以您想要的方式查看。
  • 但我不知道是什么导致了这种行为?在删除查询之前,插入按预期工作;删除查询后,发生了什么???
  • 这就是数据库的工作原理

标签: mysql


【解决方案1】:

大多数关系数据库不会以任何特定顺序返回行除非您明确要求。他们只会做最简单的事情。通常是插入顺序,或者磁盘上的顺序,或者最后使用的任何索引。这真的很随意,甚至可能在同一数据库平台的版本之间发生变化。

“如果你关心你会问”是这里的工作原则。你没有问,所以 MySQL 假定你不在乎。

添加ORDER BY 子句以获得可预测的订单。否则请为意外做好准备。

【讨论】:

  • “添加 ORDER BY 子句以获取可预测的订单” ORDER BY 始终可能无法获得可预测的订单。只有当您包含至少一列时,ORDER BY 订单才可预测它有一个主键或唯一键,可以使其完全确定(“固定”)..在非唯一值上,顺序仍然是非确定性(“随机”),其中值联系..
  • @RaymondNijland 说得好。在这种情况下,具有唯一 ID 值的情况是可以预测的,但在其他值上,可能存在可能被打乱的平局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2015-11-21
相关资源
最近更新 更多