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

Tożsamość SQL (autonumber) jest zwiększana nawet po wycofaniu transakcji

Jeśli się nad tym zastanowisz, liczba automatycznego zwiększania nie powinna być transakcyjnym. Jeśli inne transakcje musiałyby czekać, aby zobaczyć, czy auto-numerowanie będzie używane lub "wycofane", zostaną zablokowane przez istniejącą transakcję przy użyciu auto-numerowania. Rozważmy na przykład mój pseudokod poniżej z tabelą A używając pola automatycznego numerowania dla kolumny ID:

User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit


User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit

Jeśli transakcja użytkownika 2 rozpocznie się milisekundę po transakcji użytkownika 1, to jego wstawienie do tabeli A będzie musiało poczekać na zakończenie całej transakcji użytkownika 1 tylko po to, aby sprawdzić, czy użyto automatycznego numerowania z pierwszego wstawienia do A.

To jest funkcja, a nie błąd. Zalecam użycie innego schematu do generowania numerów automatycznych, jeśli chcesz, aby były ściśle sekwencyjne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikalny klucz a unikalny indeks w SQL Server 2008

  2. uporządkuj według wielu kolumn

  3. obliczyć rok obrotowy w zestawieniu sql select?

  4. SQL Server:obliczanie zakresów dat

  5. SQL Server 2008:Wstawianie zbiorcze trwa wiecznie