Возможно, стоит подумать, действительно ли вы хотите это сделать. Первичные ключи обычно не должны меняться в течение всего времени жизни строки, и вы всегда можете найти общее количество строк, выполнив:
SELECT COUNT(*) FROM table_name;
При этом следующий триггер должен «скатываться» на каждый номер ID всякий раз, когда удаление создает дыру:
CREATE TRIGGER sequentialize_ids AFTER DELETE ON table_name FOR EACH ROW
BEGIN
UPDATE table_name SET id=id-1 WHERE id > OLD.id;
END;
Я проверил это на примере базы данных, и он работает так, как рекламируется. Если у вас есть следующая таблица:
id name
1 First
2 Second
3 Third
4 Fourth
И удалить, где id = 2, после этого таблица будет:
id name
1 First
2 Third
3 Fourth
Этот триггер может занять много времени и имеет очень плохие свойства масштабирования (он занимает больше времени для каждой удаляемой строки и каждой оставшейся строки в таблице). На моем компьютере удаление 15 строк в начале таблицы из 1000 строк заняло 0,26 секунды, но это, безусловно, будет больше на iPhone.