SQLite重置主键字段

时间:2009-10-21 15:38:49

标签: sql sqlite

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

我读到DELETE FROM tablename应该删除所有内容并将自动增量字段重置回0,但是当我这样做时它只删除数据。插入新记录后,自动增量会在删除之前从中断处继续。

我的ident字段属性如下:

  • 字段类型integer
  • 字段标志PRIMARY KEYAUTOINCREMENTUNIQUE

我在SQLite Maestro中构建表并且我在SQLite Maestro中执行DELETE语句是否重要?

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:209)

试试这个:

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

SQLite Autoincrement

  

SQLite跟踪最大的   表一直使用的ROWID   特殊的 SQLITE_SEQUENCE表格。该   创建了SQLITE_SEQUENCE表   每当a。自动初始化   包含一个的普通表   AUTOINCREMENT列已创建。该   SQLITE_SEQUENCE表的内容   可以使用普通UPDATE进行修改,   INSERT和DELETE语句。但   对此表进行修改   可能会扰乱AUTOINCREMENT   密钥生成算法。确保   你知道你在做什么   进行这样的改变。

答案 1 :(得分:33)

您可以在表中删除的行

后按更新顺序重置
UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';

答案 2 :(得分:0)

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

答案 3 :(得分: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);
}
相关问题