首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要在我的sqlite表中的'order‘列还是使用rowid是安全的?

问我需要在我的sqlite表中的'order‘列还是使用rowid是安全的?
EN

Stack Overflow用户
提问于 2014-11-08 12:27:14
回答 1查看 44关注 0票数 0

我有一个表,它将一条路径与几个节点相关联。子节点的顺序很重要。

代码语言:javascript
复制
CREATE TABLE PathNodes ( pathId INTEGER, nodeId INTEGER )

rowid | pathId | nodeId
------+--------+-------
1     | 10     | 101
2     | 10     | 102
3     | 11     | 103
4     | 11     | 201
5     | 11     | 202
  • 我只插入数据一次,之后它不会改变。
  • 我按正确的顺序插入数据。
  • 我从不删除任何行。
  • 插入所有数据后,我只运行一次VACUUM

如果我想以正确的顺序得到路径的节点,那么通过rowid命令就足够安全了吗?

代码语言:javascript
复制
SELECT * 
FROM PathNodes
WHERE pathId = 2952178
ORDER BY rowId

还是我需要添加一个显式的nodeOrder列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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>创建新表( ...> node_order整数主键自动增量,...> pathId整数null,...> nodeId integer ...> );sqlite> insert insert integer ...> (pathId,nodeId) ...>按rowid选择pathId,nodeId ...>,nodeId ...>;

检查新的数据。确保这正是你想要的。然后删除旧表,重命名新表。

代码语言:javascript
复制
sqlite> drop table PathNodes;
sqlite> alter table new rename to PathNodes;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26817127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档