SQLite重置主键字段

yzxexxkh  于 2023-04-06  发布在  SQLite
关注(0)|答案(6)|浏览(289)

我在SQLite中有几个表,我试图弄清楚如何重置自动递增的数据库字段。
我读到DELETE FROM tablename应该删除所有内容并将自动增量字段重置回0,但当我这样做时,它只是删除数据。当插入新记录时,自动增量会从删除前的位置开始。
我的ident字段属性如下:

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

我在SQLite Maestro中构建了这个表,并且我也在SQLite Maestro中执行DELETE语句,这有关系吗?
任何帮助将是伟大的。

unftdfkk

unftdfkk1#

试试这个:

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

SQLite Autoincrement
SQLite使用特殊的**SQLITE_SEQUENCE表**来跟踪表中最大的ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建并初始化SQLITE_SEQUENCE表。SQLITE_SEQUENCE表的内容可以使用普通的UPDATE、INSERT、和DELETE语句。但是对该表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。

pengsaosao

pengsaosao2#

您可以在-table中删除行后按更新顺序重置

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

yrwegjxp3#

如果你有Sqlite数据库浏览器,并且更倾向于GUI解决方案,你可以编辑sqlite_sequence表,其中field name是你的表的名称。双击字段seq的单元格,并在弹出的对话框中将值更改为0。

w1jd8yoj

w1jd8yoj4#

如果您想通过内容提供程序重置每个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);
}
t0ybt7op

t0ybt7op5#

如果你正在使用python,并且你想从某个表中删除所有记录并重置AUTOINCREMENT。
你有这张table

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()
6vl6ewon

6vl6ewon6#

我意识到这个答案来得很晚,但我正在构建一个.Net Maui应用程序,遇到了同样的问题。我使用sqlite-net-pcl nuget,通过简单地删除表并重新创建它来解决这个问题。主键被设置回1。

database.DropTableAsync<Waypoint>();
       database.CreateTableAsync<Waypoint>().Wait();

相关问题