【问题标题】:Auto increment ID reversed and not organized issue自动递增 ID 已反转且未组织的问题
【发布时间】:2021-03-14 05:05:57
【问题描述】:

这听起来可能很愚蠢,它不会影响我的代码,但出于好奇,是什么导致自动增量“ID”像这样反转而不正确增量?

结构:

【问题讨论】:

  • 没有理由假设这些行是按照它们插入的顺序显示的 - 我假设这就是您所指的?在 SQL Server 中,只有在存在 order by 子句时,才会以已知方式对行进行排序。
  • 你改变了聚集索引吗?
  • 你有表格结构的截图吗?这会告诉我们发生了什么。
  • 谁知道呢,何必呢?如果您想要 ID 顺序中的结果,请使用 ORDER BY。永远不要根据“假定”顺序构建应用程序。
  • @2766 没有办法知道为什么,它与 SQL Server 的工作方式无关......除非你指定 order by,否则你会得到随机......在某些情况下(足以也许让你认为它总是如此)是插入顺序。

标签: sql sql-server asp.net-mvc


【解决方案1】:

自动递增的 id 很好。问题是查询,大概是这样的:

select *
from users;

此查询没有order by。因此,结果可以以任何顺序返回。并且顺序可以从一行更改为下一行。

要按特定顺序查看结果,您始终需要在查询中包含order by。此查询可能由工具生成,因此您无法控制。

在实践中,我希望小表上的结果按照聚集索引的顺序排列。让我强调一下,这并不能保证,但经常是这样。因此,如果将不同的列声明为主键或显式声明为聚集索引,则排序可能似乎是按该列。

【讨论】:

    【解决方案2】:

    我认为 ID 不是主键。如果您可以将 ID 作为主键,则该行的顺序应该正确。

    【讨论】:

    • 这个答案完全不正确。除非有 ORDER BY,否则您不应假设任何特定顺序。最重要的是,您混淆了主键和集群键。
    猜你喜欢
    • 2011-09-17
    • 2015-05-03
    • 2010-10-04
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多