Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо има пропуски в стойностите на моята колона IDENTITY?

Свойството identity на колона не гарантира следното :

Уникалност на стойността – Уникалността трябва да бъде наложена чрез използване на PRIMARY KEY или UNIQUE ограничение или UNIQUE индекс.

Последователни стойности в рамките на транзакция – Не е гарантирано транзакция, която вмъква множество редове, да получи последователни стойности за редовете, тъй като в таблицата може да се появят други едновременни вмъквания. Ако стойностите трябва да са последователни, тогава транзакцията трябва да използва изключително заключване на масата или да използва нивото на изолация SERIALIZABLE.

Последователни стойности след рестартиране на сървъра или други неуспехи –SQL Server може да кешира стойностите на самоличността от съображения за производителност и някои от присвоените стойности могат да бъдат загубени по време на повреда на базата данни или рестартиране на сървъра. Това може да доведе до пропуски в стойността на идентичността при вмъкване. Ако пропуските не са приемливи, приложението трябва да използва генератор на последователности с опцията NOCACHE или да използва собствен механизъм за генериране на ключови стойности.

Повторно използване на стойности – За дадено свойство на идентичност със специфично начало/инкремент, стойностите на идентичността не се използват повторно от двигателя. Ако конкретен оператор за вмъкване не успее или ако операторът за вмъкване се върне назад, тогава консумираните стойности на идентичност се губят и няма да бъдат генерирани отново. Това може да доведе до пропуски, когато се генерират следващите стойности на идентичност.

Също така,

Ако за таблица с чести изтривания съществува колона за идентичност, може да възникнат пропуски между стойностите на идентичността. Ако това е проблем, не използвайте свойството IDENTITY. Въпреки това, за да се уверите, че не са създадени пропуски или за запълване на съществуваща празнина , оценете съществуващите стойности на идентичност, преди изрично да въведете такава с SET IDENTITY_INSERT ON .

Също така, проверете свойствата на колоната за идентичност и проверете стойността на увеличение на идентичността. Трябва да е 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. Искам да използвам оператор CASE, за да актуализирам някои записи в sql server 2005

  2. Дали един израз на SQL Server е атомичен и последователен?

  3. Какво НЕ е логически оператор в SQL Server - SQL Server / TSQL урок, част 121

  4. Естествено присъединяване в SQL Server

  5. Не използвайте sp_depends в SQL Server (оттеглен е)