Android SQLite数据库删除表后,id会从1开始吗?

时间:2012-12-10 09:59:25

标签: android android-sqlite

我怀疑如果我使用以下语句删除表,

     SQLiteDatabase db = this.getWritableDatabase();
     db.delete(date_difference, null, null);

然后,如果我在表中插入一行作为新的第一条记录,那么记录的id主键自动增量是否会从1开始?

4 个答案:

答案 0 :(得分:4)

  

如果在插入上没有指定ROWID,或者指定的ROWID没有   值为NULL,然后自动创建适当的ROWID。   通常的算法是给新创建的行一个ROWID   一个大于插入前表中最大的ROWID。   如果表最初为空,则使用ROWID为1。如果最大的ROWID等于最大可能的整数   (9223372036854775807)然后数据库引擎开始挑选正面   候选人ROWID随机,直到找到之前没有的   使用

所以是的,删除表后,ID将从1开始

http://www.sqlite.org/autoinc.html

答案 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());