sql >> Databasteknik >  >> RDS >> Sqlserver

Varför finns det luckor i mina IDENTITY-kolumnvärden?

Identitetsegenskapen på en kolumn garanterar inte följande :

Värdets unika karaktär – Unikhet måste upprätthållas genom att använda en PRIMARY KEY eller UNIQUE constraint eller UNIQUE index.

Konsekutiva värden inom en transaktion – En transaktion som infogar flera rader är inte garanterad att få på varandra följande värden för raderna eftersom andra samtidiga infogningar kan förekomma i tabellen. Om värden måste vara konsekutiva bör transaktionen använda ett exklusivt lås på bordet eller använda isoleringsnivån SERIALIZABLE.

Konsekutiva värden efter omstart av servern eller andra fel –SQL Server kan cache identitetsvärden av prestandaskäl och några av de tilldelade värdena kan gå förlorade under ett databasfel eller serverns omstart. Detta kan resultera i luckor i identitetsvärdet vid infogning. Om luckor inte är acceptabla bör applikationen använda en sekvensgenerator med alternativet NOCACHE eller använda sin egen mekanism för att generera nyckelvärden.

Återanvändning av värden – För en given identitetsegenskap med specifikt frö/ökning återanvänds inte identitetsvärdena av motorn. Om en viss insert-sats misslyckas eller om insert-satsen rullas tillbaka går de förbrukade identitetsvärdena förlorade och kommer inte att genereras igen. Detta kan resultera i luckor när de efterföljande identitetsvärdena genereras.

Också

Om det finns en identitetskolumn för en tabell med frekventa raderingar kan luckor uppstå mellan identitetsvärden. Om detta är ett problem, använd inte egenskapen IDENTITY. Men för att se till att inga luckor har skapats eller för att fylla en befintlig lucka , utvärdera de befintliga identitetsvärdena innan du uttryckligen anger ett med SET IDENTITY_INSERT ON .

Kontrollera också egenskaperna för identitetskolumnen och kontrollera värdet för identitetsökning. Det ska vara 1.



  1. Hur schemalägger man en MySQL-fråga?

  2. SQL skiftlägeskänslig strängjämförelse

  3. PostgreSQL Connection Pooling med PgBouncer

  4. SQL-serverfråga för att få listan över kolumner i en tabell tillsammans med datatyper, NOT NULL och PRIMÄRNYCKEL-begränsningar