SQLite重置主键字段

我在SQLite中有几个表,我想弄清楚如何重置自动递增的数据库字段。

我读了DELETE FROM tablename应该删除所有的东西,并将自动递增字段重置为0 ,但是当我这样做时,它只是删除数据。 当插入一条新logging时,自动增量会在删除之前停止。

我的ident字段属性如下所示:

  • 字段typesinteger
  • 字段标志PRIMARY KEYAUTOINCREMENTUNIQUE

这是否有关系我在SQLite Maestro中创build了表,并且我正在执行SQLite Maestro中的DELETE语句?

任何帮助将是伟大的。

尝试这个:

 delete from your_table; delete from sqlite_sequence where name='your_table'; 

SQLite自动增量

SQLite通过使用特殊的SQLITE_SEQUENCE跟踪表所拥有的最大ROWID。 SQLITE_SEQUENCE表是在创build包含AUTOINCREMENT列的普通表时自动创build和初始化的。 SQLITE_SEQUENCE表的内容可以使用普通的UPDATE,INSERT和DELETE语句修改。 但是对这个表进行修改可能会干扰AUTOINCREMENT密钥生成algorithm。 在进行这样的改变之前,确保你知道你在做什么。

您可以在您的表中删除行之后按更新顺序进行重置

 UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name'; 

作为备选scheme,如果您拥有Sqlite数据库浏览器并更倾向于使用GUI解决scheme,则可以编辑sqlite_sequence表,其中字段名称是表的名称。 双击字段seq的单元格,并在popup的对话框中将该值更改为0。

如果你想通过内容提供者重置每个RowId,试试这个

 rowCounter=1; do { rowId = cursor.getInt(0); ContentValues values; values = new ContentValues(); values.put(Table_Health.COLUMN_ID, rowCounter); updateData2DB(context, values, rowId); rowCounter++; while (cursor.moveToNext()); public static void updateData2DB(Context context, ContentValues values, int rowId) { Uri uri; uri = Uri.parseContentProvider.CONTENT_URI_HEALTH + "/" + rowId); context.getContentResolver().update(uri, values, null, null); }