SQLite 自动增长

对于SQLite
主键数据类型为 int 类型。 
插入的时候,不传入数据, 就是默认为自动递增处理。 
last_insert_rowid()  函数用于获取最新生成的 ID

sqlite> CREATE TABLE test_create_tab2 (
   ...>   id   integer,
   ...>   val  VARCHAR(10),
   ...>   PRIMARY KEY (id)
   ...> );
sqlite>  INSERT INTO test_create_tab2(val) VALUES ('NO id');
sqlite> select last_insert_rowid();
last_insert_rowid()
1

sqlite> INSERT INTO test_create_tab2(val) VALUES ('NO id 2');
sqlite> select last_insert_rowid();
last_insert_rowid()
2

sqlite> select * from test_create_tab2;
id|val
1|NO id
2|NO id 2

sqlite> INSERT INTO test_create_tab2(id, val) VALUES (100, 'id is 100');
sqlite> INSERT INTO test_create_tab2(val) VALUES ('NO id again');
sqlite> select * from test_create_tab2;
id|val
1|NO id
2|NO id 2
100|id is 100
101|NO id again

注意:
对于无主键的表
SQLite  中还有一个 伪列 rowid, 可以作为自动递增的查询处理。
 
sqlite> CREATE TABLE test_create_tab3 (
   ...>   id   integer,
   ...>   val  VARCHAR(10)
   ...> );
sqlite>
sqlite> INSERT INTO test_create_tab3(id, val) VALUES (1, 'Test1');
sqlite> INSERT INTO test_create_tab3(id, val) VALUES (2, 'Test2');
sqlite> INSERT INTO test_create_tab3(id, val) VALUES (100, 'Test100');
sqlite> INSERT INTO test_create_tab3(id, val) VALUES (101, 'Test101');
sqlite> select rowid, id, val from test_create_tab3;
rowid|id|val
1|1|Test1
2|2|Test2
3|100|Test100
4|101|Test101

 (1) 如何建立自动增长字段? 
简短回答:声明为 INTEGER PRIMARY KEY 的列将会自动增长。 
长一点的答案: 如果你声明表的一列为 INTEGER PRIMARY KEY,那么, 每当你在该列上插入一NULL值时, NULL自动被转换为一个比该列中最大值大1的一个整数,如果表是空的, 将会是1。 (如果是最大可能的主键 9223372036854775807,那个,将键值将是随机未使用的数。) 如,有下列表:
CREATE TABLE t1( 
a INTEGER PRIMARY KEY, 
b INTEGER 
); 
在该表上,下列语句 
INSERT INTO t1 VALUES(NULL,123); 
在逻辑上等价于: 
INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); 
有一个新的API叫做 sqlite3_last_insert_rowid(), 它将返回最近插入的整数值。 
注意该整数会比表中该列上的插入之前的最大值大1。该键值在当前的表中是唯一的。但有可能与已从表中删除的值重叠。要想建立在整个表的生命周期中唯一的键值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。如果最大可能的整数值在数据表中曾经存在过,INSERT将会失败, 并返回SQLITE_FULL错误代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值