SQLite-如何设计自动增长的字段、如何取刚刚插入的记录 Id

作者:vkvi 来源:ITPOW(原创) 日期:2012-11-21

如何设计自动增长的字段

如果用 SQL 语句的话就是:

CREATE TABLE [Datas] ( [DataId] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ……

注意不能是 INT。

如果是在 SQLite Expert 中设计的话,步骤是这样的:

第一步、新建一个 INTEGER 类型的,不为 NULL 的字段。

第二步、单击 Indexs 进入索引标签,添加一个索引,将第一步建的字段移到 Index fields 框中,选中 Primary,这时 Autoincrement 可选,勾中它,就可以实现了。

(不同版本有区别,有的版本是在 Primary Key 中,有的设置无效,须用上述 SQL 语句)

SQLite自动增长的字段

如何在 insert 时强制指定 Id 值?

在写 insert SQL 语句时,将 Id 字段名和值写上即可。

指定 Id 插入后,后面不指定 Id 插入时,自动生成的 Id 排在其后面。

指定 Id 插入后,又删除,后面不指定 Id 插入时,自动生成的 Id 仍然排在其后面。

如何取刚刚插入的记录 Id

select max(rowid) from tblName;
select last_insert_rowid()
select last_insert_rowid() from tblName;

上述三行代码,是有区别的:

  • 第一行,返回 tblName 表最大的 id,什么时候去取,都可以。

  • 第二行,返回刚刚插入的记录的 id,必须是同一会话中取,我们测试时可以看到:插入、立即取、一会儿取,都可以;但是如果关了整个窗口,再打开窗口,再取,就取不到了。

  • 第三行,属于错误的用法,它也是返回刚刚插入的记录的 id,但是加了一个 from tblName,纯粹属于瞎搞。它大概是这个意思:按照 select last_insert_rowid() 不限定表,取 id,然后看看 tblName 有多少条记录,有多少条,就将刚刚取的 id 重复多少次。

说说 rowid

每个表默认都有一个 rowid字段(可以关闭),尽管我们没有建该字段,也是有的,其值就是:1、2、3、4……

注意:

如果我们表中没有自增长类型,那么新增加的记录,其 rowid 总是在当前表中 max(rowid) + 1,也就是说:

  • 如果现在表有 1、2、3、4,我删除了 4,再插入时,其 rowid 仍然是 4。

  • 但我们删除了 2,再插入时,并不会去填补 2。

如果我们表中有自增长类型,那么新增加的记录,就不会去填补任何删除的 rowid,取得的 rowid 总是和我们自增长字段值一样。


相关文章