SQLite3主键自动递增

本文分享了在Android中使用SQLite3进行主键自动递增功能的调试经验。作者最初在创建表时遇到了不指定ID值时ID为空的问题,通过调整主键字段名称为_id解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了下Android中的sqlite3,关于主键自动递增调试花了不少时间。于是记录下:

开始建表语句是这么写的:

create table user(id integer primary key autoincrement, username char(20), password char(20));

结果插入数据时不指定id的值,id就为空。

后来发现只要这么写就可以了:

create table user(_id integer primary key autoincrement, username char(20), password char(20))。

不知道是否sqlite3的主键必须叫_id

### SQLite3自动递增字段的使用方法 #### 创建带有 `AUTOINCREMENT` 字段的表 在SQLite中,可以通过定义一个具有 `INTEGER PRIMARY KEY AUTOINCREMENT` 属性的列来设置自长功能。这通常应用于主键列。 ```sql CREATE TABLE example ( id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT NOT NULL ); ``` 此命令创建了一个名为 `example` 的新表,其中包含两个字段:一个是 `id` ,它被指定为主键并且会随着每一行数据插入而自动加;另一个是 `data` ,用于存储文本信息[^1]。 #### 插入记录到含有 `AUTOINCREMENT` 列的表里 当向上述表格插入新的记录时,不需要提供 `id` 值,因为数据库引擎将会为其分配下一个可用编号: ```sql INSERT INTO example (data) VALUES ('some text'); ``` 每次执行这样的插入操作后,如果没有显式指明 `id` 的具体数值,则系统将依据现有的最大值加一作为这条记录对应的唯一标识符[^2]。 #### 修改 `sqlite_sequence` 表的影响 值得注意的是,在某些情况下可能需要重置某个表的最大序列号。由于SQLite通过内部维护一张叫做 `sqlite_sequence` 的特殊表来追踪这些信息,因此可以直接对该表执行更新操作以改变特定表项下的序列计数器。例如要使某张表重新从零开始计算其下一次新条目的 ID 可以这样做: ```sql UPDATE sqlite_sequence SET seq = 0 WHERE name='your_table_name'; ``` 不过需要注意的是,随意调整这个表里的内容有可能会影响到后续的数据完整性以及逻辑一致性,所以在做任何改动前务必确认清楚后果并做好备份工作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值