sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-identitet (autonumrering) ökas även med en återställning av transaktioner

Om du tänker efter så ska inte numret för automatisk ökning vara transaktionell. Om andra transaktioner var tvungna att vänta för att se om autonumret skulle användas eller "rullas tillbaka", skulle de blockeras av den befintliga transaktionen med autonumret. Tänk till exempel på min psuedo-kod nedan med tabell A med ett autonummerfält för ID-kolumnen:

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

Om användare 2:s transaktion börjar en millisekund efter användare 1:s, måste deras infogning i tabell A vänta på att användaren 1:s hela transaktion slutförs bara för att se om autonumret från den första infogningen i A användes.

Detta är en funktion, inte en bugg. Jag skulle rekommendera att du använder ett annat schema för att generera automatiska nummer om du behöver att de ska vara tätt sekventiella.



  1. Hur ansluter jag till mysql-servern med Go och go-sql-drivrutin?

  2. Använda tidskolumner med NHibernate, Fluent NHibernate och SQL Server 2008

  3. Behöver konvertera Oracle Merge till query till PostgreSQL

  4. plsql-procedur för att jämföra två tabeller där tabellens struktur inte är känd