SQLite3中特定表的最后插入行的rowid

3

是否有一种方法可以在SQLite3中获取特定表的最后插入的rowid?有一个函数last_insert_rowid,它返回最近成功插入行ID表或虚拟表的rowid。但是,我想知道是否有这样的方法可以获取特定表的最后插入的rowid。


不可靠,不行。如果没有插入具有用户指定的rowid值的行,则SELECT max(rowid) FROM yourtable通常可以工作。 - undefined
2个回答

3
所有表的最后插入的 rowid 都存储在内部表 sqlite_sequence 中,您可以像查询其他表一样查询它。请确保您的主键 ID 具有属性 autoincrement,否则它不会被列出。
sqlite> create table Test1 (id integer primary key autoincrement, text string);
sqlite> create table Test2 (id integer primary key autoincrement, text string);

[...]  -- Insert rows here

sqlite> select rowid from Test1;
id        
----------
1         
2         
sqlite> select rowid from Test2;
id        
----------
1         
2         
3
sqlite> select * from sqlite_sequence;
name        seq       
----------  ----------
Test1       2         
Test2       3         

一个有教养的猜测是:不会的,因为这些是不受SQLite引擎控制的。但老实说,我不知道,因为我从未与虚拟表一起工作过,也没有测试环境来帮你调查这个问题,并且没有找到处理这个细节的资源。所以,与其等待可能永远不会到来的答案,为什么不自己找出答案呢?如果你确实使用虚拟表,只需要三个SQL语句就可以初步了解情况了。 - undefined
小心竞态条件。如果您要使用这些存储的序列值来操作表,请确保将操作包装在事务中。您希望锁定并发的插入操作,否则这些值可能会在您操作时发生变化。 - undefined

1
以下可能是最简单且最可靠的方法 - 只需使用带有RowIdReturning子句即可:
insert into MyTable (Column1, Column2) Values (Val1, Val2) Returning RowId;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接