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

时间:2016-07-10 06:53:21

标签: android database sqlite

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

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";

在一个片段中,我使用insert()方法在表格中插入一行。我知道这会返回插入行的rowId但是在this线程中我读到了

  

如果表包含INTEGER PRIMARY KEY类型的列,那么   column成为ROWID的别名。然后,您可以访问ROWID   使用四个不同名称中的任何一个,描述原来的三个名字   以上或INTEGER PRIMARY KEY列的名称。所有这些   名称是彼此的别名,并且在任何名称中都同样有效   上下文。

返回的rowId也将与主键相同。但是,如果删除行并在这种情况下插入另一行,rowIdprimary key value "id"相同怎么办?

1 个答案:

答案 0 :(得分:7)

所有表格(忽略exceptions)都有行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

如果 INTEGER PRIMARY KEY列,则rowid和声明的列名称是相同值的别名:

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

| rowid | name |
| = _id |      | 
+-------+------+
|     1 | this |
|     2 | that |
|     3 | NULL |