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