SQLite之rowid与sqlite3_last_insert_rowid()

SQLite之rowid与sqlite3_last_insert_rowid(),第1张

概述SQLite数据库中的表均有一个特殊的rowid字段,它是一个不重复的64位有符号整数,默认起始值为1。rowid别名为oid或_rowid_,但在创建表的SQL声明语句中只能使用rowid作为关键字。如果在创建表的时候设置了类型为integer的具有自动增长性的主键,那么这时的主键相当于是rowid的别名。 rowid只能是单调递增的,它由SQLite内部维护,不能自己指定。对于失败的插入 *** 作,

sqlite数据库中的表均有一个特殊的rowID字段,它是一个不重复的64位有符号整数,默认起始值为1。rowID别名为oID或_rowID_,但在创建表的sql声明语句中只能使用rowID作为关键字。如果在创建表的时候设置了类型为integer的具有自动增长性的主键,那么这时的主键相当于是rowID的别名。

rowID只能是单调递增的,它由sqlite内部维护,不能自己指定。对于失败的插入 *** 作,rowID也可能在原来的基础上执行了自增。删除或回滚 *** 作并不会减小rowID的值。当rowID达到所能表示的最大值时,这时如果有新纪录要插入,系统就会从之前没有被使用过的(或从已经被删除的记录的)rowID中随机取出一个作为rowID。若没有可用的rowID,系统就会抛出sqlITE_FulL的错误。

rowID字段在表中默认是隐藏的,也就是说,除非SQL查询语句中指定返回rowID,否则查询结果不会包含有rowID字段。

可以在创建表时使用WITHOUT ROWID以声明不生成rowID字段,例如:

CREATE table IF NOT EXISTS wordcount(

word TEXT PRIMARY KEY,

cnt INTEGER

) WITHOUT ROWID;

将关键字autoINCREMENT使用在声明为WITHOUT ROWID的表不但不起作用,还将引发一个错误。

sqliteAPI 函数sqlite3_last_insert_rowID()可以取得最后一条插入的记录的rowID。但sqlite3_last_insert_rowID()是基于当前进程的。也就是说,sqlite3_last_insert_rowID()取到的是当前进程最后一次插入记录的rowID。对于不是当前进程插入的记录,sqlite3_last_insert_rowi()均返回0。sqlite3_last_insert_rowi()对应的sql声明为last_insert_rowID(),例如:

select last_insert_rowID() from exam_tbl

总结

以上是内存溢出为你收集整理的SQLite之rowid与sqlite3_last_insert_rowid()全部内容,希望文章能够帮你解决SQLite之rowid与sqlite3_last_insert_rowid()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存