PRIMARY KEY后ASC/DESC的作用及两种建表语句差异咨询
关于SQLite中PRIMARY KEY ASC/DESC的差异与初始用途
首先明确两段建表语句的核心差异:
CREATE TABLE posts1 (id INTEGER PRIMARY KEY ASC);:
ASC是SQLite默认的排序方向,可省略。此时id会被自动设为SQLite隐式rowid的别名(等效于INTEGER PRIMARY KEY),插入数据时如果不指定id值,SQLite会自动生成递增的整数填充,且这个列复用了rowid的底层存储结构,性能最优。CREATE TABLE posts1 (id INTEGER PRIMARY KEY DESC);:
加上DESC后,id不再是rowid的别名,它只是一个普通的整数列,且带有降序排列的主键约束。插入数据时必须手动指定id的值(不会自动生成),同时该主键对应的索引会按id的降序来存储和排序。
至于PRIMARY KEY后ASC/DESC的初始用途,这是SQL标准定义的语法,核心作用是指定主键索引的排序方向:
- 它决定了主键索引在物理存储上的排列顺序,同时当你执行不带
ORDER BY的查询时,结果会默认按照主键索引的顺序返回(ASC升序,DESC降序)。 - SQLite对
INTEGER PRIMARY KEY做了特殊优化(关联rowid),但这个优化仅在不指定排序方向(或显式指定ASC)时生效;一旦指定DESC,就会回到标准SQL的逻辑,仅作为普通主键的排序方向声明,不再触发rowid别名的特殊处理。
内容的提问来源于stack exchange,提问作者VanechikSpace
相关产品推荐
相关产品推荐

