sql >> Databasteknik >  >> RDS >> Sqlserver

Garanterar SQL Server sekventiell infogning av en identitetskolumn?

Garanterat eftersom du under absolut inga som helst omständigheter skulle kunna få ett värde som kan vara mindre än eller lika med det nuvarande maxvärdet? Nej, det finns ingen sådan garanti. Som sagt, omständigheterna under vilka det scenariot skulle kunna inträffa är begränsade:

  1. Någon inaktiverar identitetsinfogning och infogar ett värde.
  2. Någon ser om identitetskolumnen.
  3. Någon ändrar tecknet för ökningsvärdet (dvs. istället för +1 ändras det till -1)

Om du antar att inga av dessa omständigheter är, är du säker från tävlingsförhållanden och skapar en situation där nästa värde är lägre än ett befintligt värde. Som sagt, det finns ingen garanti för att raderna kommer att beslutas i samma ordning som deras identitetsvärden. Till exempel:

  1. Öppna en transaktion, infoga i tabellen med en identitetskolumn. Låt oss säga att den får värdet 42.
  2. Infoga ett annat värde i samma tabell. Låt oss säga att den får värdet 43.

Tills den första transaktionen är genomförd finns 43 men 42 inte. Identitetskolumnen reserverar helt enkelt ett värde, den dikterar inte ordningsföljden för bekräftelser.



  1. load_file-funktionen fungerar inte i mysql

  2. MySQL returnerar första och sista posten för på varandra följande identiska resultat

  3. Hur man hittar Top Losers för 1 dag, 1 månad baserat på historiska data

  4. välj * från tabellnamn där kolumn som " "