我在SQLite中有几个表,我试图弄清楚如何重置自动递增的数据库字段。
我读到DELETE FROM tablename
应该删除所有内容并将自动增量字段重置回0
,但是当我这样做时它只删除数据。插入新记录后,自动增量会在删除之前从中断处继续。
我的ident
字段属性如下:
integer
PRIMARY KEY
,AUTOINCREMENT
,UNIQUE
我在SQLite Maestro中构建表并且我在SQLite Maestro中执行DELETE
语句是否重要?
任何帮助都会很棒。
答案 0 :(得分:209)
试试这个:
delete from your_table;
delete from sqlite_sequence where name='your_table';
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);
}