Allora si dovrebbe fare un UPDATE della riga invece di cancellare tutta la riga, e il numerale progressivo rimane al suo posto.
Allestisci la Query:
UPDATE `nome_tabella` SET `nome_colonna`='' WHERE `id`='';
per lasciare tutte le colonne vuote (='') o NULL (dipende da come è strutturata la tabella).
Poi si dovrebbe disporre di una ulteriore colonna diciamo, di servizio (la puoi aggiungere con Query ALTER TABLE), dove lasciamo nel contempo una flag, per esempio: 'disponibile' dimodochè la riga invece che eliminata diventa "flaggata".
La successiva Query di INSERT INTO che produrrebbe nuova riga, verrà preceduta da un tentativo con UPDATE che ispeziona se ci sono rows flaggate 'disponibile', se sì sceglie l' ID più basso e fa l' UPDATE in questa; altrimenti, procede con INSERT INTO.
Anche nel prelevare i dati, la SELECT potrà tener conto della flag, per non stampare campi vuoti.