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

2019-02-19  本文已影响2人  AItsuki

参考:
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主键默认自动增长的原因。

上一篇下一篇

猜你喜欢

热点阅读