Questo è in base alla progettazione: tutti i DBMS agiscono in questo modo con colonne con incremento automatico.
Se non lo facessero, l'integrità referenziale esterna potrebbe essere danneggiata. Per un semplice esempio di ciò, immagina di archiviare gli URL per un servizio di accorciamento utilizzando una colonna di incremento automatico come chiave. Non sai se l'URL abbreviato è stato ancora distribuito a nessuno, e il database certamente no, quindi il riutilizzo dell'ID 1234 potrebbe comportare che la povera nonna di qualcuno visiti somenastypornsite.xxx invece di loverlyknitting.org quando fa clic su http: / /shortthi.ng/1234 in una vecchia email, invece di ricevere un messaggio "scusa ma questo link non esiste più nei nostri archivi".
Inoltre, se ripristini l'incremento dopo aver eliminato l'ultimo elemento, eseguirai anche tutto il lavoro (o ti aspetti che il database sia) di rinumerare tutto dopo il 5 ° elemento di 5 milioni quando il 5o elemento viene rimosso? completo di modifiche ad altre tabelle in cui sono i vincoli di chiave esterna che puntano alla colonna di incremento? Tale lavoro extra potrebbe diventare molto costoso per quanto riguarda l'IO.
Se fai ripristinare il punto di incremento dopo l'eliminazione l'ultimo elemento, si deve essere molto, molto attenti dei vostri livelli di isolamento delle transazioni: Si potrebbe ripristinare solo come un'altra transazione si avvale del valore, che porta ad errori (o, errori silenti peggio), a meno che ti assicuri che la tua azione sia completamente isolata al 100%.
In genere consiglio alle persone che lavorano con i database di leggere "SQL Antipatterns" che contiene un capitolo su questo problema chiamato "Psuedo-Key Neat Freaks" (che tratta la questione in modo più amichevole di quanto il titolo del capitolo possa implicare per alcuni!). In sostanza, se il valore ha un significato oltre ad essere una chiave (o al massimo portando informazioni sull'ordine di inserimento), probabilmente non dovrebbe essere una colonna auto-incrementante, e se non ha alcun significato oltre ad essere una chiave (o al massimo portando un ordine di inserimento informazioni), quindi le lacune non dovrebbero avere importanza.