SQLite中的ROWID是自动设置的吗?

问题描述 投票:0回答:3

所以,我在 Ionic 上有这个应用程序,它使用 SQLite ngCordova 插件 进行内部存储。在其上,我使用以下命令创建一个表:

db.executeSql(
    "CREATE TABLE IF NOT EXISTS Scans_table (" +
      //"id         TEXT PRIMARY KEY  NOT NULL," +
      "name       TEXT              NOT NULL," +
      "comment    TEXT, " +
      "text       TEXT              NOT NULL, " +
      "format     TEXT              NOT NULL, " +
      "dateTaken  TEXT              NOT NULL, " +
      "imgSource  TEXT              NOT NULL)", ... );

根据this,如果我没有主键和整数的列,则应该将ROWID设置为唯一标识符。

问题是,当我使用简单的

SELECT * ...
查询表时,我看到了我设置的所有行,而不是 ROWID。

有其他方法来设置/检查 ROWID 吗?

android cordova ionic-framework sqlite
3个回答
29
投票

文档所示,您的表确实有一个内部

rowid
列。但是,如果表的列列表不包含该列的别名(即 INTEGER PRIMARY KEY 列),则
rowid
列不会包含在
SELECT *
中。

您只需在 SELECT 子句中添加列即可:

SELECT rowid, * FROM Scans_table ...

但是,如果您实际使用

rowid
,最好有一个显式的 INTEGER PRIMARY KEY 列。这不仅可以更好地记录表结构,还可以防止
rowid
值被 VACUUM 语句更改。


1
投票
在 SqliteStudio 3.4.3 中,将 () 放在 rowid 周围:“select (rowid),* from asso” 注意 Sqlite3 的 Python 代码不需要 ()。


0
投票
您可以根据

文档获取如下所示的ROWID

SELECT rowid FROM person;
或者:

SELECT oid FROM person;
或者:

SELECT _rowid_ FROM person;
而且,您还可以通过省略默认的 

rowid

 列来创建新的 
rowid
 列,如下所示。 *
我的答案解释了如何插入带有自定义PRIMARY KEY
列的行:

CREATE TABLE person ( rowid INTEGER PRIMARY KEY, name TEXT ) WITHOUT ROWID;
然后就可以得到

ROWID,如下图。 *oid

_rowid_
 在这种情况下会给你错误:

SELECT rowid FROM person;
    
© www.soinside.com 2019 - 2024. All rights reserved.