SQLite重置主键字段
我在SQLite中有几个表,我想弄清楚如何重置自动递增的数据库字段。
我读了DELETE FROM tablename
应该删除所有的东西,并将自动递增字段重置为0
,但是当我这样做时,它只是删除数据。 当插入一条新logging时,自动增量会在删除之前停止。
我的ident
字段属性如下所示:
- 字段types :
integer
- 字段标志 :
PRIMARY KEY
,AUTOINCREMENT
,UNIQUE
这是否有关系我在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); }