【发布时间】:2018-11-14 17:05:52
【问题描述】:
让我进一步解释一下。
我在 sqlite 中有一个表格,看起来像这样:
table
------
id numeric primary key,
uuid text not null,
other_field text
现在 id 是标准的自动增量类型。该表可以随时添加和删除条目,因此如果再次使用之前使用过的rowid,那很好。我没有使用 sqlite 的“表全”功能。允许有多个具有相同 uuid 的条目。这个想法是我通常只对最后插入的条目感兴趣。
这就提出了一个问题。我知道我可以打电话 "select other_field from table where uuid=? order by rowid desc"
这没问题,但如果 rowid 环绕怎么办?按 rowid desc 排序不会给我最新的条目。
我能想到的就是添加一个像这样的 creation_time 字段
table
------
id numeric primary key,
uuid text not null,
other_field text
creation_time datetime
然后在创建时将 datetime('now') 放在该字段中。
select other_field from table where uuid=? order by creation_time desc
但这意味着添加一个额外的字段和更大的索引。有没有内置的方法来做到这一点?
【问题讨论】:
-
您多久向此表添加一次行?
-
为什么不使用 AUTOINCREMENT 主键?
rowid在 SQLite 中保留。 -
其实我已经在用rowid了,不过叫id..只是改了个名字而已。 rowid 和 id 实际上是相同的,您可以定义它,请参阅文档。
-
好吧,这样说吧,它可能永远不会换行,但我要确保它不会出现问题。这是缓存的一部分,更新频率很高,项目也经常被删除。
-
如果您使用 sqlite3,您的 rowid 是一个 64 位整数,因此它需要很长时间才能换行。当您可以创建具有相同结构的新表、用数据填充它、删除旧表并将新表重命名为原始名称时,您是否有可能计划停机?这将重新初始化您的 rowid 以从 1 开始。
标签: sqlite