小心Sqlite的autoincrement可能会让你产生误解

参考:
https://www.sqlite.org/autoinc.html
https://www.sqlite.org/lang_createtable.html#rowid
「译」sqlite为什么autoincrement不推荐使用2018/09/15

Sqlite官方:不推荐使用autoincrement

很多开发者在数据库建表时,都会自然而然的将主键声明为autoincrement,意思是想让主键自动增长,而实际上这个想法是错误的,并且也是官方不建议这么使用的,它会占用额外的CPU,内存,磁盘空间和磁盘I / O开销。

autoincrement的主键必须是INTEGER类型,但是INTEGER类型的主键本身默认就是自动增长的。
所以autoincrement并不是字面上“自动增长”的意思(或许2.3.4版本以前是,但现在不是),而是表示当id等于最大支持的数后(9223372036854775807),再插入数据时是否可以重复使用原来已删除或没有使用的行。

autoincrement 默认为false时可以。

autoincrement设置为true时不可以,并抛出错误:[Err] 13 - database or disk is full


甚至于,如果不需要建立表关系的情况下,主键也不是必须的,因为默认情况下sqlite会为表中每条数据配分一个自增长的rowid,用于标识行的唯一。

可以试下这行代码看看是否能查到

select rowid from TABLE_NAME;

rowid也可替换成_rowid_oid

在建表时声明id INTEGER PRIMARY KEY实际上是为rowid声明了一个别名,所以这也是为什么INTERGER主键默认自动增长的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值