重置主键字段

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

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

我的 ident字段属性如下:

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

在 SQLite Maestro 中构建表并在 SQLite Maestro 中执行 DELETE语句,这有什么关系吗?

任何帮助都可以。

129725 次浏览

试试这个:

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

SQLite 自动增量

SQLite 跟踪最大的 表曾经使用过的 ROWID 特别的 SQLITE_SEQUENCE 创建 SQLITE_SEQUENCE表,然后 时自动初始化 包含一个 创建了 AUTOINCREMENT 列 SQLITE _ SEQUANCE 表的内容 可以使用普通的 UPDATE 进行修改, 和 DELETE 语句,但是 修改这张桌子 可能会扰乱自动增量 密钥生成算法,确保 你知道你在做什么 进行这些改变。

作为替代选项,如果您有 Sqlite Database Browser 并且更倾向于 GUI 解决方案,则可以编辑 Sqlite _ order 表,其中字段名是表的名称。双击字段 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';

如果您正在使用 python,并且希望从某个表中删除所有记录并重置 AUTOINCREMENT。

你有这张桌子

tables_connection_db.execute("CREATE TABLE MY_TABLE_DB (id_record INTEGER PRIMARY KEY AUTOINCREMENT, value_record real)")

所以如果你添加了一些记录

connection_db=sqlite3.connect("name_file.db")
tables_connection_db=connection_db.cursor()


tables_connection_db.execute("DELETE FROM  MY_TABLE_DB ") # delete records
connection_db.commit()


name_table="MY_TABLE_DB"
tables_connection_db.execute("UPDATE sqlite_sequence SET seq=1 WHERE name=? ",(name_table,))
connection_db.commit()


connection_db.close()