我有表的列,有些列是varchar。我注意到表中的行是自动排序的。相反,我希望行的顺序与插入表中的顺序相同。有线索吗?请注意,我没有应用任何ORDER BY
子句,并且列的日期都相同。
很明显,虽然我首先添加了测试用书3 ,但它自动低于测试用书2 ,这是不可取的。
是因为我的PK是复合的吗?
答案 0 :(得分:5)
您没有准确指定您正在使用哪个RDBMS,但我可以说以下关于Microsoft SQL Server:
如果没有ORDER BY子句,您无法保证任何可预测/可重复的排序
如果要在插入行时按行排序,则需要:添加一个新列,该列可以是IDENTITY(可以是INT或BIGINT),也可以是DATETIME / DATETIME2数据类型,默认约束为GETDATE()或GETUTCDATE() AND 按此新字段订购
新字段与PK无关。这是参考别人提出的建议。 PK用于关系,而不是排序,虽然IDENTITY通常用于PK,但是有很多情况下具有一个或多个非自动递增字段的PK并且仍然具有自动递增字段。
如果您需要插入记录的毫秒/纳秒以及保证/可重复排序的详细信息,请两者 DATETIME / DATETIME2和IDENTITY字段。
添加这些字段中的一个或两个并不意味着任何特定的索引结构。它们的存在只允许您创建一个或多个索引,这些索引将包含它们以强制执行您想要的顺序。
答案 1 :(得分:1)
请注意,SQL不保证在插入或选择行时进行排序。 您可以查看类似于您的问题的答案here
我通过插入进行排序的方式是我会添加DATETIME列,它获取插入时的日期/时间值。
(如何做到这一点你可以在接受的答案中看到{ {3}})
然后在选择期间通过DATETIME列进行订单