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

Czy SQL Server gwarantuje sekwencyjne wstawianie kolumny tożsamości?

Gwarantowane, ponieważ w absolutnie żadnych okolicznościach nie można uzyskać wartości, która może być mniejsza lub równa aktualnej wartości maksymalnej? Nie, nie ma takiej gwarancji. To powiedziawszy, okoliczności, w których ten scenariusz może się wydarzyć, są ograniczone:

  1. Ktoś wyłącza wstawianie tożsamości i wstawia wartość.
  2. Ktoś ponownie umieszcza kolumnę tożsamości.
  3. Ktoś zmienia znak wartości przyrostu (tzn. zamiast +1 zmienia się na -1)

Zakładając, że żadna z tych okoliczności, nie jesteś bezpieczny w sytuacji wyścigu, tworząc sytuację, w której następna wartość jest niższa niż istniejąca wartość. To powiedziawszy, nie ma gwarancji, że wiersze zostaną zatwierdzone w kolejności ich wartości tożsamości. Na przykład:

  1. Otwórz transakcję, wstaw do tabeli z kolumną tożsamości. Powiedzmy, że otrzymuje wartość 42.
  2. Wstaw i zatwierdź w tej samej tabeli inną wartość. Powiedzmy, że otrzymuje wartość 43.

Dopóki pierwsza transakcja nie zostanie zatwierdzona, 43 istnieje, ale 42 nie. Kolumna tożsamości po prostu rezerwuje wartość, nie dyktuje kolejności zatwierdzeń.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie danych z procedury składowanej za pomocą Entity Framework

  2. Usuń tożsamość z kolumny w tabeli

  3. Czy naprawdę muszę używać SET XACT_ABORT ON?

  4. EXEC do użycia bazy danych

  5. Złe nawyki:unikanie NULL w SQL Server