SQLite Reset Поле первичного ключа

У меня есть несколько таблиц в SQLite, и я пытаюсь выяснить, как reset поле с автоматической добавленной базой данных.

Я читал, что DELETE FROM tablename должен удалить все и reset поле автоинкремента обратно в 0, но когда я это делаю, он просто удаляет данные. Когда новая запись вставлена, автоинкремент поднимается там, где он был удален до удаления.

Мои свойства поля ident следующие:

  • Тип поля: integer
  • Флаги поля: PRIMARY KEY, AUTOINCREMENT, UNIQUE

Имеет ли значение, я построил таблицу в SQLite Maestro, и я выполняю инструкцию DELETE в SQLite Maestro?

Любая помощь будет большой.

Ответ 1

Попробуйте следующее:

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

SQLite Autoincrement

SQLite отслеживает самые большие ROWID, который когда-либо проводил таблица специальную таблицу SQLITE_SEQUENCE. SQLITE_SEQUENCE создается таблица и автоматически инициализируется всякий раз, когда нормальная таблица, содержащая Создается столбец AUTOINCREMENT. содержимое таблицы SQLITE_SEQUENCE могут быть изменены с помощью обычного UPDATE, INSERT и DELETE. Но внесение изменений в эту таблицу вероятно, нарушит АВТОИНКРИЕМ алгоритм генерации ключей. Убедиться вы знаете, что делаете перед вами предпринимать такие изменения.

Ответ 2

Вы можете reset по последовательности обновления после удаленных строк в таблице

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

Ответ 3

В качестве альтернативного варианта, если у вас есть браузер Sqlite Database Browser и более склонны к графическому интерфейсу, вы можете редактировать таблицу sqlite_sequence, где имя поля - это имя вашей таблицы. Дважды щелкните ячейку для поля seq и измените значение на 0 в появившемся диалоговом окне.

Ответ 4

Если вы хотите reset каждый 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);
}