使用PRIMARY KEY ASC的SQLite SELECT默认顺序

Pab*_*abo 5 sqlite select

我使用以下方法创建了一个SQLite表:

CREATE TABLE T1 (
  CN INTEGER PRIMARY KEY ASC,
  Name TEXT
);
Run Code Online (Sandbox Code Playgroud)

如果我做:

SELECT * FROM T1
Run Code Online (Sandbox Code Playgroud)

即使没有指定ORDER BY子句,我也能通过CN获得行顺序吗?CN是ROWID的别名吗?

Ton*_*son 8

没有默认订单,如果您需要订购结果,请添加明确的order by子句.

dbms经过优化,可以根据查询快速获取所需数据.在这种情况下,它是CN上的主键,但这仅仅是因为您的示例非常简单.永远不要依赖于dbms选择您想要的订单.


Baq*_*aqs 7

第二个问题可能对其他人有用。

从 SQLite 文档:

除了 WITHOUT ROWID 表之外,SQLite 表中的所有行都有一个 64 位有符号整数键,用于唯一标识其表中的行。这个整数通常称为“rowid”。
...如果 rowid 表的主键由单个列组成,并且该列的声明类型是大小写混合的“INTEGER”,则该列将成为 rowid 的别名。

这也适用于声明为“INTEGER PRIMARY KEY ASC”类型的列,因此在您的表中 CN 是“rowid”的别名

更多信息可以在这里找到:http : //www.sqlite.org/lang_createtable.html#rowid