我有一个包含以下架构的表:
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也将与主键相同。但是,如果删除行并在这种情况下插入另一行,rowId
与primary key value "id"
相同怎么办?
答案 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 |