SQLite 查找最近或下一个 ROWID 的 ROWID

问题描述 投票:0回答:5

所以我有一个包含图像数据的表格。桌子看起来像这样......

ROWID|title|description|file_path

文件路径包含图像的名称。我想重命名图像以匹配 ROWID。

如何获取最新的ROWID?我还需要考虑已删除的行,因为我将其用作自动增量主键。因为,如果表中的一行已被删除,则表可能看起来像这样......

1|title A|description A|..\fileA.jpg
2|title B|description B|..\fileB.jpg
5|title E|description E|..\fileE.jpg
7|title G|description G|..\fileG.jpg

最重要的是,可能有一行或多行已被删除,因此据我所知,下一个 ROWID 可能是 10。

我还需要考虑一个全新的表或已删除所有数据的表,并且下一个 ROWID 可能是 1000。

总而言之,我想真正的问题是;有没有办法找出下一个 ROWID 是什么?

sqlite rowid
5个回答
3
投票

如果您在主键字段中指定了 AUTOINCREMENT 并且表不为空,则此查询将返回表 MY_TABLE 的最新 ROWID:

SELECT seq
FROM sqlite_sequence 
WHERE name = 'MY_TABLE'

0
投票

什么语言?看起来c API有以下功能:

sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);

http://www.sqlite.org/c3ref/last_insert_rowid.html

你也可以这样做:

select MAX(rowid) from [tablename];

0
投票

不幸的是,这些方法都没有完全按照我需要的方式工作,但我最终所做的是......

将数据插入表中,其中的字段我需要 rowid 填充“aaa” 然后用数据更新行。

这似乎解决了我当前的问题。希望它不会在未来引起另一个问题。


0
投票

我认为

last_insert_rowid
通常就是你想要的。

请注意,rowid 行为根据自动增量标志而有所不同 - 要么单调增加,要么采用任何空闲 id。但这通常不会影响任何较小的用例。


0
投票

作为mafu:我认为last_insert_rowid通常是你想要的。 所以:进行插入,调用last_insert_rowid并加1,进行ROLLBACK。 在 98% 的情况下,这是最后一个 ROWID

在 SWIFT 中

var database: OpaquePointer?
var rowID : Int
if sqlite3_open(path, &database) == SQLITE_OK {
   sqlite3_exec(database, "BEGIN TRANSACTION", nil, nil, nil)
   sqlite3_exec(database, "INSERT INTO dettaglioclienti (idcliente) VALUES ('kkkkkk')", nil, nil, nil)
   rowID = sqlite3_last_insert_rowid(database)
   sqlite3_exec(database, "ROLLBACK", nil, nil, nil)
   sqlite3_close(database)
}
let nextRowID = rowID+1
© www.soinside.com 2019 - 2024. All rights reserved.