РЕДАКТИРОВАТЬ: Может быть, я должен уточнить, что просто вставка строк с правильным идентификатором вместо манипулирования порядковым номером определенно является лучшей идеей, чем метод ниже. Если в таблице нет строки с id = 3, вы можете просто вставить фиксированное значение в id даже в таблицу AUTOINCREMENT.
Тем не менее, если вы действительно уверены , вы можете установить для значения автоматического приращения любое значение, используя;
UPDATE sqlite_sequence set seq=<next sequence no -1> where name=<table name>;
То есть, если вы хотите, чтобы AUTOINCREMENT при следующей вставке в таблицу 'TableA' генерировал 5, вам нужно;
UPDATE sqlite_sequence set seq=4 where name='TableA';
Обратите внимание, что сброс seq
ведет себя немного иначе, чем вы можете ожидать, это просто означает, что самый низкий сгенерированный идентификатор будет большим из seq + 1
и max id still in the table + 1
.
То есть, если вы удалите все значения> = 5, вы можете сбросить значение последовательности до 4 и создать 5 как следующий порядковый номер, , но если у вас все еще есть идентификатор 10 в таблице, следующий сгенерированное число будет 11 вместо .
Может быть, мне следует указать на тот факт, что я не могу найти такое точное поведение, документированное где-либо, поэтому я не буду полагаться на поведение для каждой будущей версии sqlite. Это работает сейчас, может не завтра.