Как повторно заполнить столбец с автоинкрементом в базе данных 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 будет идентификатором для новой записи...
Таким образом, вы можете решить, какие записи оставить, а какие следует удалить в качестве неразрушающего или даже более гибкого подхода.
Для меня это сработало - чисто и легко. ;)