用Google搜索了相当多的答案,并找到了解答类似但不同问题的答案,但不是我想要做的事情。
我有一张桌子,我想为它添加一个行号。所以:
ID || value
91 || valueA
11 || valueB
71 || valueC
变为
Row# || ID || value
1 || 91 || valueA
2 || 11 || valueB
3 || 71 || valueC
发现this answer比我的用例复杂一点。此外,我被警告不要使用答案,因为它们的计算成本很高(n ^ 2-ish)。
还找到了一些其他答案,例如this one,其中用户想要为查询返回的行号,但这是一个不同的用例。我只想在表中的所有行中附加一个行号。
答案 0 :(得分:2)
根据您的问题,您似乎要求在数据库中添加另一列。如果不是这样,请评论。
在数据库创建类(或创建数据库的任何位置)中,在CREATE TABLE
语句中,使用以下结构:
CREATE TABLE table_name(
RowNum INTEGER AUTOINCREMENT,
_ID INTEGER PRIMARY KEY,
value TEXT,
);
将数据库版本增加1,这样做会很好。
答案 1 :(得分:2)
我想你知道,在SQL表中没有固有的顺序。因此,任何“行号”都基于一些隐含的顺序。如果在DBMS中使用任何类型的“行ID”,则隐式顺序可能是插入顺序。这很便宜,如果它符合你的需要,那就是你想要的。
您创建的任何其他“行号”都需要排序;如果索引支持,那么排序将是O( N log N ),否则,是,O( N ^ 2 )。数学有一种非常坚持的方式。
在用不同的伪装多次回答这个问题之后,我写了simple example。在SQLite中,我有不到一百万行的良好经验。更大的种类需要更长时间,YMMV。
FWIW,我从不存储衍生订单。由于系统无法切实执行其正确性,因此无法确定其是否正确。最好在有趣的订单上保留一个覆盖指数,并在需要时依靠视图提供等级序数。