我怀疑如果我使用以下语句删除表,
SQLiteDatabase db = this.getWritableDatabase();
db.delete(date_difference, null, null);
然后,如果我在表中插入一行作为新的第一条记录,那么记录的id主键自动增量是否会从1开始?
答案 0 :(得分:4)
如果在插入上没有指定ROWID,或者指定的ROWID没有 值为NULL,然后自动创建适当的ROWID。 通常的算法是给新创建的行一个ROWID 一个大于插入前表中最大的ROWID。 如果表最初为空,则使用ROWID为1。如果最大的ROWID等于最大可能的整数 (9223372036854775807)然后数据库引擎开始挑选正面 候选人ROWID随机,直到找到之前没有的 使用
所以是的,删除表后,ID将从1开始
答案 1 :(得分:2)
提供的文档说明删除方法是:
Convenience method for deleting rows in the database.
语法为:
int delete(String table, String whereClause, String[] whereArgs)
因此它不会再从1开始。它将从最后一次增量继续。如果删除了整个表,然后重新创建它,则增量将从1开始。
答案 2 :(得分:1)
SQLite使用名为“sqlite_sequence”的内部表跟踪表所持有的最大ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建并初始化sqlite_sequence表**。 可以使用普通的UPDATE,INSERT和DELETE语句**修改sqlite_sequence表的内容。但是对此表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。
因此,当您删除表并重新创建它时,应该从0开始重新启动SQLITE_SEQUENCE。
你应该这样做:
Delete from date_difference;
Delete from sqlite_sequence where name='date_difference';
小心,因为where子句中的字段'table name'
区分大小写。
阅读this了解更多信息。
答案 3 :(得分:0)
将主键字段定义为
INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1
如果要为主键字段插入任何值,请删除代码,如下所示
values.put(KEY_PRIMARY, object.getIntegerValue());