1

在此处输入图像描述

我有带有列的表,有些列是 varchar。我注意到表中的行是自动排序的。相反,我希望行的顺序与插入表中的顺序相同。有什么线索吗?请注意,我没有应用任何ORDER BY子句,并且列的日期都是相同的。

很明显,虽然我首先添加了测试手册 3,但它自动低于测试手册 2,这是不需要的。

是不是因为我的PK是复合的?

4

2 回答 2

5

您没有具体说明您使用的是哪个 RDBMS,但对于 Microsoft SQL Server,我可以说以下几点:

  1. 如果没有 ORDER BY 子句,您不能保证任何可预测/可重复的排序

  2. 如果您希望在插入行时对其进行排序,您需要: 添加一个新列,该列是 IDENTITY(可以是 INT 或 BIGINT)或 DATETIME / DATETIME2 数据类型,默认约束为 GETDATE() 或 GETUTCDATE( ) AND ORDER BY 这个新领域

  3. 新领域与PK无关。这是参考其他人提出的建议。PK 用于关系,而不是排序,虽然 IDENTITY 通常用于 PK,但在很多情况下,PK 包含一个或多个非自增字段,但仍具有自增字段。

  4. 如果您需要插入记录的毫秒/纳秒以及保证/可重复排序的详细信息,请同时执行 DATETIME / DATETIME2 和 IDENTITY 字段。

  5. 添加这些字段中的一个或两个并不意味着任何特定的索引结构。它们的存在仅允许您创建一个或多个包含它们的索引以强制执行您想要的排序。

于 2013-05-04T06:46:22.093 回答
1

请注意,SQL 不保证插入或选择行时的顺序。您可以在此处查看与您类似的问题的答案

我通过插入进行排序的方式是添加 DATETIME 列,该列获取插入时的日期/时间值。
(如何做到这一点,您可以在此问题的已接受答案中看到)

然后在选择期间在 DATETIME 列上进行排序

于 2013-05-04T07:04:04.403 回答