Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite重置主键字段_Sql_Sqlite - Fatal编程技术网

SQLite重置主键字段

SQLite重置主键字段,sql,sqlite,Sql,Sqlite,我在SQLite中有几个表,我正试图找出如何重置自动递增的数据库字段 我读到DELETE FROM tablename应该删除所有内容,并将自动递增字段重置为0,但当我这样做时,它只是删除数据。插入新记录时,自动增量将在删除之前停止的位置重新开始 我的ident字段属性如下: 字段类型:整数 字段标志:主键,自动递增,唯一 我在SQLite Maestro中构建了表,并且在SQLite Maestro中执行DELETE语句,这有关系吗 任何帮助都会很好。试试这个: delete from y

我在SQLite中有几个表,我正试图找出如何重置自动递增的数据库字段

我读到
DELETE FROM tablename
应该删除所有内容,并将自动递增字段重置为
0
,但当我这样做时,它只是删除数据。插入新记录时,自动增量将在删除之前停止的位置重新开始

我的
ident
字段属性如下:

  • 字段类型
    整数
  • 字段标志
    主键
    自动递增
    唯一
我在SQLite Maestro中构建了表,并且在SQLite Maestro中执行
DELETE
语句,这有关系吗

任何帮助都会很好。

试试这个:

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

SQLite跟踪最大的 ROWID,一张桌子曾经用 特殊的
SQLITE\u序列
。这个
SQLITE\u序列
表已创建并 每当出现错误时自动初始化 包含 将创建自动增量列。这个 SQLITE_序列表的内容 可以使用普通更新进行修改, 插入、删除和删除语句。但是 对该表进行修改 可能会干扰自动增量 密钥生成算法。确保 你知道你在做什么吗 进行这样的改变


作为替代选项,如果您使用Sqlite数据库浏览器,并且更倾向于使用GUI解决方案,则可以编辑Sqlite_序列表,其中字段名称是表的名称。双击字段seq的单元格,并在弹出的对话框中将值更改为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);
}

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

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

只需注意一点:where子句中的表名区分大小写。另一种方法是更新sqlite_序列表。更新sqlite_sequence set seq=0,其中name=''这将不会重置sqlite_sequence表的rowid。@binary,感谢您提到另一种方法:)我想注意sqlite重用“已删除”空间,因此,我们将选择哪种解决方案并没有多大区别。请注意,SQLite仅在定义自动增量列时创建SQLite_序列表。它在此之前不存在。@GSandro_Strongs,大小相同,因为SQLite重用“已删除”的空间。有一种方法可以重建数据库文件以占用最少的磁盘空间。你能告诉我如何在空间中这样做吗?你说的@Psycho是什么意思?我不明白:)实际上我是在问如何在房间数据库中做到这一点。。。。。好了,问题解决了now@Psycho你能告诉我你是如何使用房间数据库的吗?