Как повторно заполнить столбец с автоинкрементом в базе данных SQLite?

Можно ли повторно заполнить столбец автоинкремента в базе данных SQLite, и если да, то как это сделать?

то есть. Эквивалент DBCC CHECKIDENT ('MyTable', RESEED, 1) в SQL Server.

3 ответа

Решение

В SQLite есть таблица с именем SQLITE_SEQUENCE, которая отслеживает самые большие RowId значение, которое имеет таблица. Вы можете делать вставки, обновления и удаления в этой таблице. Например, чтобы имитировать аналогичную функциональность, что и оператор TRUNCATE TABLE SQL Server, вы могли бы что-то вроде:

DELETE FROM MyTableName;
DELETE FROM SQLITE_SEQUENCE WHERE NAME = 'MyTableName';

В приведенном выше примере все данные из MyTableName удаляются, а идентификатор строки с автоприращением сбрасывается путем удаления значения из таблицы SQLITE_SEQUENCE. См. Документацию для AUTOINCREMENT для получения дополнительной информации.

DELETE 
FROM MyTableName

select *
from SQLITE_SEQUENCE

update SQLITE_SEQUENCE 
set seq = 0
where name ='MyTableName'

В качестве альтернативы вы можете экспортировать файл SQL из базы данных SQLite. Затем отредактируйте сгенерированный файл SQL и обновите соответствующие записи до нужных идентификаторов или удалите операторы INSERT. После этого создайте новую пустую базу данных и заполните ее скорректированным файлом SQL. Самый высокий идентификатор + 1 будет идентификатором для новой записи...

Таким образом, вы можете решить, какие записи оставить, а какие следует удалить в качестве неразрушающего или даже более гибкого подхода.

Для меня это сработало - чисто и легко. ;)

Другие вопросы по тегам