问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQLIte如何设置自动增长的字段?

发布网友 发布时间:2022-04-26 10:14

我来回答

7个回答

懂视网 时间:2022-04-08 02:46

在用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作为新值,而自增长字段则会丢出一个SQLITE_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]      datetime default (datetime(‘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操作将失 败并返回一个SQLITE_FULL错误码.


本文出自 “椟夜的博客” 博客,谢绝转载!

sqlite3自增key设定(创建自增字段)

标签:sqlite 自增key

热心网友 时间:2022-04-07 23:54

1、创建测试临时表。

2、查看表中数据。

3、插入新纪录(所有列与表字段顺序一致)。

4、插入新记录(对于可空类型字段,插入空值时,可以省略该栏位。

5、插入新记录(对于VALUES后面按照表中顺序每个字段都赋值的时候,表名后面的栏位全部可以省略)。

6、修改表中数据。

7、删除表中数据,(删除完成后,查询其结果)。

热心网友 时间:2022-04-08 01:12

1、首先用Navicat打开我们的数据库,点击打开表视图。

2、然后右键点击要设置自增字段的那个表,在弹出菜单上点击‘Design Table’(即表设计)。

3、打开表设计视图,点击选中要设置为自增的那个字段。

4、然后在下方的设置里,点击勾选上Auto Increment就行了。

5、如果要设置自增开始的数字,我们可以点击上方的‘Option’(选项),

6、打开后,在Auto Increment的输入框里输入数字就行了,比如输入100,自增字段就是从100开始自增。

热心网友 时间:2022-04-08 02:47

CREATE TABLE salespeople (
id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
commission_rate REAL NOT NULL
);
主键如果是INTEGER ,默认就是增长类型,其他字段可以通过申明AUTOINCREMENT ,但是最好不要这样做,因为自动增长主要是为主键设置的追问已经建立的表。或从其它数据库导入的表如何添加一个这样的键?

追答ALTER TABLE salespeople ADD new_col INTEGER AUTOINCREMENT

热心网友 时间:2022-04-08 04:38

CREATE TABLE [TableName]
(
[Id] INTEGER PRIMARY KEY AUTOINCREMENT,
[Remark] VARCHAR(500)
) ;

热心网友 时间:2022-04-08 06:46

create table tb (
idx INTEGER PRIMARY KEY,
otherfiles
);

热心网友 时间:2022-04-08 09:11

auto_incream
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
250电脑摇头灯不用512控制台如何自走? 我怎么总这样想啊?? 那曲冬虫夏草那曲冬虫夏草生长环境 哪里的虫草最好 颈3以上椎体刺痛向前移位怎么办 cad2012 64位注册码 09VR 62JX YSHG X1F6 NXU9 UCNY 24CG QXPZ_百度知... 腰4椎体向前移位,与摔伤有关系吗 求高手指点2012cad是怎么了 是64位 官网下载 注册机破解 尾三椎体骨质欠连续远端稍向前移位 ...腰五椎移位,报告说腰五椎弓峡部不连续发椎体向前滑移。腰椎退行性改... sqlite developer 数据库默认路径 安卓手机开发,创建SQlite数据库后,默认路径是存 sqlite 默认编码是utf-8怎么转换成gbk的 sqlite的几个常用方法 如何设置sqlite Python3 ptqt5如何显示sqlite3默认值 centos sqlite数据库默认存储地址 sqlite中怎么设置默认时间 sqlite怎样给字段设置默认值? 柠檬酸怎样溶解不结晶 柠檬酸生产工艺流程 柠檬酸发酵原理特征和方法 烟气脱硫脱硝技术的“柠檬酸盐法”烟气脱硫技术 环保脱金水柠檬酸加多了锌丝可以置换干净吗? 碳酸钠和柠檬酸钠溶液能脱金层吗? 怎么查看电脑内存。怎么办? 柠檬酸提取 异柠檬酸脱氢酶可不可以叫做脱羧酶,为什么? 柠檬酸分子内脱水产物解释 柠檬酸可以剥脱角质我可以理解为这款泡泡会使角质层变薄吗? SQLite如何设置自动增长的主键 想要退小黄车的余额 打电话给客服 说要发个人信息给ofo邮箱 但没记得邮箱是什么。。。怎么退 ofo小黄车余额退不了,电话一直都是占线,客服也一直联系不上,邮箱也发不过去邮件怎么办 怎么给客服kefu@chsi.com.cn发邮件 p40多少钱钱啊? 我换手机号了对方为什么可以和我畅连视频? 电子邮箱怎么发送 ofo官方邮箱在哪里呀 为什么我的电话莫名其妙被封停了? 新买的十三看朋友圈视频有时候老卡是怎么回事 带关于翅的网名 带翅膀的网名 oppo k5手机朋友圈发视频又卡又慢怎解决问题? 跟翅膀有关的网名且带有折翼的味道 长安QQ音乐三年免费包是啥意思? 带翼字的四字文雅唯美网名 苹果7微信看朋友圈视频总是卡住是怎么回事? qq音乐付费包怎么设置自动续费 与 花儿 带刺 的情侣网名 给我起下一句 谢谢了 把你 QQ给我吧 微信朋友圈拍摄的小视频模糊,卡顿怎么办