我有一个表,它将一条路径与几个节点相关联。子节点的顺序很重要。
CREATE TABLE PathNodes ( pathId INTEGER, nodeId INTEGER )
rowid | pathId | nodeId
------+--------+-------
1 | 10 | 101
2 | 10 | 102
3 | 11 | 103
4 | 11 | 201
5 | 11 | 202VACUUM如果我想以正确的顺序得到路径的节点,那么通过rowid命令就足够安全了吗?
SELECT *
FROM PathNodes
WHERE pathId = 2952178
ORDER BY rowId还是我需要添加一个显式的nodeOrder列?
发布于 2014-11-08 12:54:49
在SQLite中,rowid是等效于整数主键。
在SQLite中,具有整数主键类型的列是ROWID的别名(除了在没有ROWID表中),它始终是一个64位有符号整数。
在您的应用程序中,数据库防止重复使用行id号是有意义的。SQLite可能会重用罗威你现在使用它的方式。
如果你删除了行。。。然后,在创建新行时,可能会重用以前删除的行中的ROWID。。。。
由于integer primary key只是rowid的别名,并且autoincrement 防止罗威的重复使用来自已删除的行,因此在将新列声明为integer primary key autoincrement时不需要占用空间或性能。而且有明显的优势。
创建一个新列为integer primary key autoincrement。
由于SQLite不支持直接添加声明为primary key的列,所以需要
检查新的数据。确保这正是你想要的。然后删除旧表,重命名新表。
sqlite> drop table PathNodes;
sqlite> alter table new rename to PathNodes;https://stackoverflow.com/questions/26817127
复制相似问题