Ini adalah desain - semua tindakan DBMS ini dengan kolom kenaikan otomatis.
Jika integritas integritas referensial mereka tidak dapat rusak. Untuk contoh sederhana ini, bayangkan Anda menyimpan URL untuk layanan pemendek menggunakan kolom kenaikan otomatis sebagai kunci. Anda tidak tahu apakah URL yang diperpendek telah diberikan kepada siapa pun, dan databasenya jelas tidak, jadi menggunakan kembali ID 1234 dapat mengakibatkan nenek miskin mengunjungi somenastypornsite.xxx alih-alih loverlyknitting.org ketika dia mengklik http: / /shortthi.ng/1234 di email lama, alih-alih menerima pesan "maaf tapi tautan ini tidak ada lagi di catatan kami".
Juga jika Anda mengatur ulang kenaikan setelah menghapus item terakhir, apakah Anda juga akan melalui semua pekerjaan (atau mengharapkan basis data) untuk menomori ulang semuanya setelah item ke-5 dari 5 juta ketika item ke-5 dihapus? lengkap dengan perubahan pada tabel lain di mana kendala kunci asingnya menunjuk pada kolom kenaikan? Pekerjaan ekstra semacam itu bisa sangat mahal untuk IO.
Jika Anda melakukan reset titik kenaikan setelah menghapus item terakhir, jangan menjadi sangat sangat berhati-hati dari tingkat isolasi transaksi Anda: Anda mungkin ulang seperti transaksi lain merek menggunakan dari nilai, yang mengarah ke kesalahan (atau lebih buruk, kegagalan diam), kecuali Anda memastikan bahwa tindakan Anda sepenuhnya 100% terisolasi.
Saya biasanya merekomendasikan orang yang bekerja dengan database membaca "SQL Antipatterns" yang memiliki bab tentang masalah ini bernama "Psuedo-Key Neat Freaks" (yang membahas masalah ini dengan cara yang lebih ramah daripada judul bab yang mungkin menyiratkan pada beberapa!). Pada dasarnya, jika nilai memiliki makna di luar menjadi kunci (atau paling banyak membawa informasi pesanan penyisipan) maka mungkin tidak boleh menjadi kolom penambahan-otomatis, dan jika itu tidak memiliki makna di luar menjadi kunci (atau paling banyak membawa urutan penyisipan informasi) maka kesenjangan seharusnya tidak menjadi masalah.