Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego w moich wartościach w kolumnie IDENTITY są luki?

Właściwość tożsamości w kolumnie nie gwarantuje następujących :

Wyjątkowość wartości – Niepowtarzalność musi być wymuszona za pomocą klucza PRIMARY KEY lub UNIQUE lub UNIQUE index.

Kolejne wartości w ramach transakcji – Transakcja wstawiająca wiele wierszy nie gwarantuje uzyskania kolejnych wartości wierszy, ponieważ w tabeli mogą wystąpić inne współbieżne operacje wstawiania. Jeśli wartości muszą być następujące po sobie, transakcja powinna użyć blokady na wyłączność w tabeli lub użyć poziomu izolacji SERIALIZABLE.

Kolejne wartości po ponownym uruchomieniu serwera lub innych awariach –Program SQL Server może buforować wartości tożsamości ze względu na wydajność, a niektóre z przypisanych wartości mogą zostać utracone podczas awarii bazy danych lub ponownego uruchomienia serwera. Może to spowodować luki w wartości tożsamości po wstawieniu. Jeśli luki są niedopuszczalne, aplikacja powinna użyć generatora sekwencji z opcją NOCACHE lub użyć własnego mechanizmu do generowania wartości kluczy.

Ponowne wykorzystanie wartości – Dla danej właściwości tożsamości z określonym zarodkiem/przyrostem wartości tożsamości nie są ponownie używane przez aparat. Jeśli dana instrukcja INSERT nie powiedzie się lub jeśli instrukcja INSERT zostanie wycofana, zużyte wartości tożsamości zostaną utracone i nie zostaną ponownie wygenerowane. Może to skutkować przerwami podczas generowania kolejnych wartości tożsamości.

Również

Jeśli istnieje kolumna tożsamości dla tabeli z częstymi usunięciami, mogą wystąpić przerwy między wartościami tożsamości. Jeśli jest to problem, nie używaj właściwości IDENTITY. Jednak aby upewnić się, że nie utworzono żadnych luk lub aby wypełnić istniejącą lukę , oceń istniejące wartości tożsamości przed ich jawnym wprowadzeniem za pomocą opcji SET IDENTITY_INSERT ON .

Sprawdź również Właściwości kolumny tożsamości i sprawdź wartość Przyrostu tożsamości. Powinien wynosić 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. Najszybszy sposób na wyświetlenie listy wszystkich baz danych w SQL Server przy użyciu T-SQL

  2. Jak uzyskać losowe wiersze z tabeli SQL Server — samouczek SQL Server / TSQL część 117

  3. SQL Server 2008 nie może się zalogować za pomocą nowo utworzonego użytkownika

  4. SQL Server Azure / 2022 Tabele księgi bazy danych z systemu Linux.

  5. Klucz obcy do klucza złożonego