Đây là theo thiết kế - tất cả DBMS thực hiện điều này với các cột tăng tự động.
Nếu họ không toàn vẹn tham chiếu bên ngoài có thể bị hư hại. Đối với một ví dụ đơn giản về điều này, hãy tưởng tượng bạn đang lưu trữ URL cho dịch vụ rút ngắn bằng cách sử dụng cột tăng tự động làm khóa. Bạn không biết liệu URL rút ngắn đã được cung cấp cho bất kỳ ai chưa, và cơ sở dữ liệu chắc chắn là không, vì vậy việc sử dụng lại ID 1234 có thể dẫn đến việc bà ngoại nghèo truy cập somenastyyhsite.xxx thay vì lovlyknmit.org khi cô nhấp vào http: / /shortthi.ng/1234 trong một email cũ, thay vì nhận được thông báo "xin lỗi nhưng liên kết này không còn tồn tại trong hồ sơ của chúng tôi".
Ngoài ra, nếu bạn đặt lại mức tăng sau khi xóa mục cuối cùng, bạn cũng sẽ hoàn thành tất cả công việc (hoặc mong muốn cơ sở dữ liệu) đánh số lại mọi thứ sau mục thứ 5 là 5 triệu khi mục thứ 5 bị xóa? hoàn thành với các thay đổi đối với các bảng khác trong đó các ràng buộc khóa ngoài của chúng chỉ vào cột tăng? Làm thêm như vậy có thể nhận được IO-khôn rất tốn kém.
Nếu bạn làm reset điểm tăng sau khi xóa mục cuối cùng, đừng có rất rất cẩn thận về mức cô lập giao dịch của bạn: Bạn có thể thiết lập lại nó chỉ như là một giao dịch làm cho việc sử dụng các giá trị, dẫn đến sai sót (hoặc tệ hơn, thất bại im lặng), trừ trường hợp bạn chắc chắn rằng hành động của bạn được cách ly hoàn toàn 100%.
Tôi thường khuyên những người làm việc với cơ sở dữ liệu nên đọc "SQL Antipotype" có một chương về vấn đề này có tên là "Psuedo-Key Neat Freaks" (bao gồm vấn đề theo cách thân thiện hơn so với tiêu đề chương có thể ám chỉ một số!). Về cơ bản, nếu giá trị có ý nghĩa ngoài việc là khóa (hoặc nhiều nhất là mang thông tin thứ tự chèn) thì có lẽ đó không phải là cột tăng tự động và nếu nó không có ý nghĩa gì ngoài việc là khóa (hoặc nhiều nhất là mang theo lệnh chèn thông tin) sau đó khoảng cách không nên quan trọng.