Если бы это было на самом деле требование (и что-то пахнет этим), я, вероятно, выполнил бы его с помощью триггера ON DELETE.
В этом триггере, когда происходило удаление, я немедленно выбирал строкусоответствует текущему max (id) в таблице, и если max (id) больше, чем идентификатор строки, которую вы только что удалили *, я бы сделал обновление наидентификатор существующей строки, совпадающий с идентификатором только что удаленной строки.
* Причина того, что max (id) больше, чем идентификатор только что удаленной строки, заключается вубедитесь, что вы не выполняете обновление в случае, когда вы только что удалили строку max.
Теперь я не знаю, поддерживает ли sqlite даже триггеры.Если этого не произойдет, вам придется реализовать ту же логику в клиентском коде.
Конечно, это означает, что ваши идентификаторы будут сильно колебаться ... что в большинстве приложений будет гораздо более проблематичным, чем отсутствиепоследовательные идентификаторы.Поэтому мне все еще интересно, почему вы думаете, что вам нужны последовательные идентификаторы.