不,从理论上讲这是不可能的,因为正如您所说,没有 ORDER BY,返回行的顺序是任意的。无法保证订单会随着时间的推移保持稳定。
不,作为一个实际问题,这通常是不可能的。但是,您可以采用一些变通方法。
您可以将该表重命名为<<TABLENAME>>_OLD,在名为 的表之上创建一个视图<<TABLENAME>>,然后在该视图中嵌入一个 ORDER BY 以按您想要的任何顺序返回数据。
如果视图选项不起作用(如果你有很多数据,它可能会有问题)并且你真的,真的,真的需要一个 hack,你可以创建一个新表,插入 FOO(以及所有要添加的行之前的其他行),插入新行,然后插入其余行。然后删除旧表并重命名新表以使用旧表名。当然,没有任何保证,但这通常会导致 ORDER BY-lessSELECT以您想要的顺序返回数据。如果您在表中有合理数量的数据,那将非常难看。
您继承的代码已损坏 - 而且它一直都已损坏。需要完成您想避免的重构。
order by
除了显式保证结果集的排序顺序之外别无选择,而且从来没有。谁知道您继承的代码是否总是按照原始开发人员“预期”的顺序返回行。
不,从理论上讲这是不可能的,因为正如您所说,没有 ORDER BY,返回行的顺序是任意的。无法保证订单会随着时间的推移保持稳定。
不,作为一个实际问题,这通常是不可能的。但是,您可以采用一些变通方法。
您可以将该表重命名为
<<TABLENAME>>_OLD
,在名为 的表之上创建一个视图<<TABLENAME>>
,然后在该视图中嵌入一个 ORDER BY 以按您想要的任何顺序返回数据。如果视图选项不起作用(如果你有很多数据,它可能会有问题)并且你真的,真的,真的需要一个 hack,你可以创建一个新表,插入 FOO(以及所有要添加的行之前的其他行),插入新行,然后插入其余行。然后删除旧表并重命名新表以使用旧表名。当然,没有任何保证,但这通常会导致 ORDER BY-less
SELECT
以您想要的顺序返回数据。如果您在表中有合理数量的数据,那将非常难看。这取决于您的实际数据中是否存在任何排序。如果有,您可以通过使用索引组织表来实现。但正如其他人所说,数据库并不是为了隐式保证顺序而设计的。