Dies ist beabsichtigt - alle DBMS-Aktionen wurden mit Spalten für die automatische Inkrementierung ausgeführt.
Andernfalls könnte die externe referenzielle Integrität beschädigt werden. Stellen Sie sich als einfaches Beispiel vor, Sie speichern URLs für einen Verkürzungsdienst mit einer Spalte für die automatische Inkrementierung als Schlüssel. Sie wissen noch nicht, ob die verkürzte URL an jemanden weitergegeben wurde, und die Datenbank sicherlich nicht. Daher kann die Wiederverwendung der ID 1234 dazu führen, dass die arme Oma von jemandem somenastypornsite.xxx besucht, anstatt lovelyknitting.org, wenn sie auf http: / klickt /shortthi.ng/1234 in einer alten E-Mail, anstatt die Meldung "Entschuldigung, aber dieser Link ist in unseren Datensätzen nicht mehr vorhanden" zu erhalten.
Wenn Sie das Inkrement nach dem Löschen des letzten Elements zurücksetzen, werden Sie dann auch die ganze Arbeit (oder die Erwartung der Datenbank) durchlaufen, alles nach dem 5. Element von 5 Millionen neu zu nummerieren, wenn das 5. Element entfernt wird? komplett mit Änderungen an anderen Tabellen, bei denen Fremdschlüsseleinschränkungen auf die Inkrementspalte verweisen? Solche zusätzliche Arbeit könnte in Bezug auf E / A sehr teuer werden.
Wenn Sie tun , den Zuwachs Punkt zurückgesetzt , nachdem das letzte Element zu löschen, sei sehr , sehr vorsichtig Ihrer Transaktionsisolationsstufen: Sie setzen könnte es nur als eine andere Transaktion Fabrikaten der Wert verwenden, was zu Fehlern (oder noch schlimmer, leise Ausfälle), es sei denn , Sie stellen sicher, dass Ihre Aktion vollständig zu 100% isoliert ist.
Ich empfehle generell Leuten, die mit Datenbanken arbeiten, "SQL Antipatterns" zu lesen, das ein Kapitel zu diesem Thema mit dem Namen "Psuedo-Key Neat Freaks" enthält (das die Angelegenheit auf eine freundlichere Art und Weise behandelt, als der Kapiteltitel für manche vermuten lässt!). Wenn der Wert eine Bedeutung hat, die nicht nur ein Schlüssel ist (oder höchstens Informationen zur Einfügungsreihenfolge enthält), sollte er wahrscheinlich keine automatisch inkrementierende Spalte sein, und wenn er keine Bedeutung hat, die über die Bedeutung eines Schlüssels hinausgeht (oder höchstens eine Einfügereihenfolge enthält) Informationen) dann sollten Lücken keine Rolle spielen.