sql >> Database >  >> RDS >> Sqlserver

SQL-identiteit (autonummering) wordt verhoogd, zelfs met een terugdraaiing van de transactie

Als je erover nadenkt, zou het auto-increment nummer niet moeten transactioneel zijn. Als andere transacties moesten wachten om te zien of het autonummer zou worden gebruikt of "teruggedraaid", zouden ze worden geblokkeerd door de bestaande transactie met het autonummer. Beschouw bijvoorbeeld mijn pseudo-code hieronder met tabel A met een automatisch nummerveld voor de ID-kolom:

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

Als de transactie van gebruiker 2 een milliseconde na die van gebruiker 1 begint, dan zou hun invoeging in tabel A moeten wachten tot de volledige transactie van gebruiker 1 is voltooid, alleen om te zien of de automatische nummering van de eerste invoeging in A is gebruikt.

Dit is een functie, geen bug. Ik zou aanraden om een ​​ander schema te gebruiken om auto-nummers te genereren als je ze strak opeenvolgend wilt hebben.



  1. Hoe een volgnummer te genereren in de MySQL-weergave?

  2. SSAS-dimensieverwerking maakt onderliggende metingen onverwerkt

  3. PDF gemaakt met FPDF en hoe de pdf op te slaan en op te halen

  4. ORM-queryresultaten:Arrays vs Result-handle verpakt in Iterator-interface