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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS中的数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\N...
    JonesCxy阅读 3,989评论 0 3
  • 1. SQLite数据库介绍 开源, 支持NULL, INTEGER, REAL(浮点数), TEXT(字符串)...
    ahking17阅读 3,998评论 0 0
  • iOS开发数据库篇—SQLite简单介绍 一、离线缓存在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据...
    未来可期me阅读 3,875评论 0 10
  • 什么是SQLite?数据库存储数据的步骤 ●SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备...
    飞行的猫阅读 7,286评论 1 7
  • 治病良方:怀念汪曾祺先生 文/圆圈 我在初二的时候翻到一篇散文,然后隔空迷上了一个人。我翻他过去的文章,只比吸毒稍...
    飞起来的圆圈阅读 4,300评论 3 7

友情链接更多精彩内容