Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sqlite 自增 table大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

http://duohuot.iteye.com/blog/1174029

sqlite 自增 table

    博客分类:
  • android
sqlite android
在用sqlite设计表时,每个表都有一个自己的整形ID值作为主键,其实可以不指定这么一个ID值,sqlite内部本来就会为每个表加上一个 rowID,这个rowID可以当成一个隐含的字段使用,但是由SQLite引擎来维护的,在3.0以前rowID是32位的整数,3.0以后是 64位的整数,为什么不直接使用这个内部的rowID作为每个表的ID主键呢。

相关的文档在这里:?http://www.sqlite.org/autoinc.HTML?http://www.sqlite.org/faq.HTML

用指定INTEGER PRIMARY KEY autoINCREMENT 和不指定自增长字段用rowID有什么区别:

使用自增长字段为主键有不少问题,比如维护或是在大型分布应用中主键冲突的解决等。在一些大型分布应用中主键一般选用guID,这可以有效的避免主键冲突,减少对主键维护的工程。当然,对于中小型的应用,自增长字段的好处更多一些,简单、快速。

sqlite中,一个自增长字段定义为INTEGER PRIMARY KEY autoINCREMENT,那么在插入一个新数据时,只需要将这个字段的值指定为NulL,即可由引擎自动设定其值,引擎会设定为最大的rowID+1。当然,也可以设置为非NulL的数字来自己指定这个值,但这样就必须自己小心,不要引起冲突。当这个rowID的值大于所能表达的最大值 9223372036854775807 (3.0及以后版本的rowID最大值)后,rowID的新值会这个最大数之前随机找一个没被使用了的值。所以在rowID达到最大值前,rowID的值是严格单调增加的。
INTEGER PRIMARY KEY autoINCREMENT 自增长字段的算法与rowID稍微有些不同。
第一,在达到最大值后,rowID会找已被删除的字段对应的rowID作为新值,而自增长字段则会丢出一个@R_278_5607@FulL的错误。
第二,自增长字段在增加新值时,是找一个从没被使用过的rowID作为新值,而rowID则是找最大已存在的rowID+1。这里对应用的影响会比较大,尤其是一些对ID值有依赖的元记录,只适合使用自增长字段而不能用rowID。

比如,我们设计一个元记录表:
drop table test;
create table test (
[tkID] INTEGER PRIMARY KEY autoincrement,-- 设置主键
[tktype] int default 0,
[tablEID] varchar (50),
[createdate] datetiR_418_11845@e default (datetiR_418_11845@e('Now','localtime')) -- 时间
);


第三,使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,用户可以看到,并可以用使用 update、delete和Insert操作,但不建议这么使用,这会让引擎混乱。如果使用rowID,也会有这么一个内部表,用户可以维护rowID 值,但看不到。
这么看来,如果直接使用rowID来代替自增加字段,根据两者的细微的差别,需要注意是否与自己的应用冲突,如果没有冲突,那么用rowID会更快一点。

sqlite中创建自增字段:

简单的回答:一个声明为 INTEGER PRIMARY KEY 的字段将自动增加。

sqlite 的 2.3.4 版本开始,如果你将一个表中的一个字段声明为 INTEGER PRIMARY KEY,那么无论你何时向该表的该字段插入一个 NulL 值,这个 NulL 值将自动被更换为比表中该字段所有行的最大值大 1 的整数;如果表为空,那么将被更换为 1。

一个新的API函数 sqlite3_last_insert_rowID() 返回最近的插入操作的整形键.

注意这个整型键始终比之前插入表中的最后一个键大1。新键相对于表中的已有键来说是唯一的,但它可能与之前从表中删除的键值重叠。要始终得到在整个表中唯一的键,在INTEGER PRIMARY KEY的声明之前加关键词autoINCREMENT.这样被选的键将总是比表中已存在的最大键大1。若可能的最大键已存在于表中,INSERT操作将失败并返回一个@R_278_5607@FulL错误码.

大佬总结

以上是大佬教程为你收集整理的sqlite 自增 table全部内容,希望文章能够帮你解决sqlite 自增 table所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:在3