У меня есть несколько таблиц в SQLite, и я пытаюсь выяснить, как reset поле с автоматической добавленной базой данных.
Я читал, что DELETE FROM tablename
должен удалить все и reset поле автоинкремента обратно в 0
, но когда я это делаю, он просто удаляет данные. Когда новая запись вставлена, автоинкремент поднимается там, где он был удален до удаления.
Мои свойства поля ident
следующие:
integer
PRIMARY KEY
, AUTOINCREMENT
, UNIQUE
Имеет ли значение, я построил таблицу в SQLite Maestro, и я выполняю инструкцию DELETE
в SQLite Maestro?
Любая помощь будет большой.
Попробуйте следующее:
delete from your_table;
delete from sqlite_sequence where name='your_table';
SQLite отслеживает самые большие ROWID, который когда-либо проводил таблица специальную таблицу
SQLITE_SEQUENCE
.SQLITE_SEQUENCE
создается таблица и автоматически инициализируется всякий раз, когда нормальная таблица, содержащая Создается столбец AUTOINCREMENT. содержимое таблицы SQLITE_SEQUENCE могут быть изменены с помощью обычного UPDATE, INSERT и DELETE. Но внесение изменений в эту таблицу вероятно, нарушит АВТОИНКРИЕМ алгоритм генерации ключей. Убедиться вы знаете, что делаете перед вами предпринимать такие изменения.
Вы можете reset по последовательности обновления после удаленных строк в таблице
UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';
Если вы хотите 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);
}
В качестве альтернативного варианта, если у вас есть браузер Sqlite Database Browser и более склонны к графическому интерфейсу, вы можете редактировать таблицу sqlite_sequence, где имя поля - это имя вашей таблицы. Дважды щелкните ячейку для поля seq и измените значение на 0 в появившемся диалоговом окне.