我使用以下方法创建了一个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的别名吗?
没有默认订单,如果您需要订购结果,请添加明确的order by子句.
dbms经过优化,可以根据查询快速获取所需数据.在这种情况下,它是CN上的主键,但这仅仅是因为您的示例非常简单.永远不要依赖于dbms选择您想要的订单.
第二个问题可能对其他人有用。
从 SQLite 文档:
除了 WITHOUT ROWID 表之外,SQLite 表中的所有行都有一个 64 位有符号整数键,用于唯一标识其表中的行。这个整数通常称为“rowid”。
...如果 rowid 表的主键由单个列组成,并且该列的声明类型是大小写混合的“INTEGER”,则该列将成为 rowid 的别名。
这也适用于声明为“INTEGER PRIMARY KEY ASC”类型的列,因此在您的表中 CN 是“rowid”的别名
更多信息可以在这里找到:http : //www.sqlite.org/lang_createtable.html#rowid
| 归档时间: |
|
| 查看次数: |
5433 次 |
| 最近记录: |