Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao có khoảng trống trong các giá trị cột IDENTITY của tôi?

Thuộc tính danh tính trên một cột không đảm bảo những điều sau :

Tính duy nhất của giá trị - Tính duy nhất phải được thực thi bằng cách sử dụng KHÓA CHÍNH hoặc ràng buộc DUY NHẤT hoặc chỉ mục DUY NHẤT.

Giá trị liên tiếp trong một giao dịch - Giao dịch chèn nhiều hàng không được đảm bảo nhận được các giá trị liên tiếp cho các hàng vì các lần chèn đồng thời khác có thể xảy ra trên bảng. Nếu các giá trị phải liên tiếp thì giao dịch phải sử dụng một khóa độc quyền trên bảng hoặc sử dụng mức cách ly SERIALIZABLE.

Giá trị liên tiếp sau khi máy chủ khởi động lại hoặc các lỗi khác –SQL Server có thể lưu vào bộ nhớ cache các giá trị nhận dạng vì lý do hiệu suất và một số giá trị được gán có thể bị mất khi cơ sở dữ liệu bị lỗi hoặc khởi động lại máy chủ. Điều này có thể dẫn đến khoảng trống trong giá trị nhận dạng khi chèn. Nếu khoảng trống không được chấp nhận thì ứng dụng nên sử dụng trình tạo trình tự với tùy chọn NOCACHE hoặc sử dụng cơ chế riêng của chúng để tạo các giá trị khóa.

Sử dụng lại các giá trị - Đối với một thuộc tính nhận dạng nhất định có hạt giống / gia số cụ thể, các giá trị nhận dạng không được công cụ sử dụng lại. Nếu một câu lệnh chèn cụ thể không thành công hoặc nếu câu lệnh chèn được cuộn lại thì các giá trị nhận dạng đã sử dụng sẽ bị mất và sẽ không được tạo lại. Điều này có thể dẫn đến khoảng trống khi các giá trị nhận dạng tiếp theo được tạo.

Ngoài ra,

Nếu tồn tại một cột nhận dạng cho một bảng thường xuyên bị xóa, khoảng trống có thể xảy ra giữa các giá trị nhận dạng. Nếu đây là một mối quan tâm, không sử dụng thuộc tính IDENTITY. Tuy nhiên, để đảm bảo rằng không có khoảng trống nào được tạo ra hoặc để lấp đầy khoảng trống hiện có , hãy đánh giá các giá trị nhận dạng hiện có trước khi nhập một cách rõ ràng với SET IDENTITY_INSERT ON .

Ngoài ra, hãy kiểm tra Thuộc tính cột nhận dạng &kiểm tra giá trị Tăng dần danh tính. Nó phải là 1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi “Không thể thả trình kích hoạt” khi Cố gắng thả Trình kích hoạt đăng nhập? Thử cái này.

  2. Tại sao lại sử dụng mệnh đề INCLUDE khi tạo chỉ mục?

  3. Cách thêm AM / PM vào giá trị thời gian trong SQL Server (T-SQL)

  4. Ký tự thoát trong SQL Server

  5. Cách sử dụng TẤT CẢ Toán tử logic trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 126