在Android中,Sqlite与主键的ROWID相同吗?

Par*_*ras 1 database sqlite android

我有一个包含以下架构的表:

public static final String PRIMARY_KEY = "_id";
public static final String TASK_NAME = "name";
public static final String TASK_DESCRIPTION = "description";
public static final String IS_TASK_COMPLETED = "is_completed";
public static final String IS_TASK_DELETED = "is_deleted";
public static final String TASK_START_DATE = "start_date";
public static final String TASK_START_TIME = "start_time";
public static final String ESTIMATED_TASK_END_DATE = "end_date";
public static final String TIMESTAMP = "timestamp";
Run Code Online (Sandbox Code Playgroud)

在一个片段中,我使用该insert()方法在表中插入一行.我知道这会返回rowId插入的行,但在这个帖子中我读到了

如果表包含INTEGER PRIMARY KEY类型的列,则该列将成为ROWID的别名.然后,您可以使用四个不同的名称中的任何一个来访问ROWID,上面描述的原始三个名称或给予INTEGER PRIMARY KEY列的名称.所有这些名称都是彼此的别名,并且在任何情况下都能同样有效.

返回的rowId也将与主键相同.但是如果删除一行并且在那种情况下插入另一行,rowId那么该primary key value "id"怎么做呢?

CL.*_*CL. 8

所有表(忽略异常)都有一个行ID.

当没有列声明为INTEGER PRIMARY KEY时,rowid它与其他列分开:

CREATE TABLE A ( _id INT PRIMARY KEY, name TEXT ); -- not "INTEGER"

| rowid | _id | name |
+-------+-----+------+
|     1 |   1 | this |
|     2 |   2 | that |
|     3 |  30 | NULL |  -- does not need to be the same
Run Code Online (Sandbox Code Playgroud)

如果一个INTEGER PRIMARY KEY列,都rowid和声明的列名是别名相同的价值:

CREATE TABLE B ( _id INTEGER PRIMARY KEY, name TEXT );

| rowid | name |
| = _id |      | 
+-------+------+
|     1 | this |
|     2 | that |
|     3 | NULL |
Run Code Online (Sandbox Code Playgroud)