Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Garantiert SQL Server das sequentielle Einfügen einer Identitätsspalte?

Garantiert, da Sie unter keinen Umständen einen Wert erhalten könnten, der kleiner oder gleich dem aktuellen Höchstwert ist? Nein, eine solche Garantie gibt es nicht. Allerdings sind die Umstände, unter denen dieses Szenario eintreten könnte, begrenzt:

  1. Jemand deaktiviert das Einfügen der Identität und fügt einen Wert ein.
  2. Jemand setzt die Identitätsspalte neu.
  3. Jemand ändert das Vorzeichen des Inkrementwerts (d. h. statt +1 wird es in -1 geändert)

Unter der Annahme, dass keiner dieser Umstände vorliegt, sind Sie vor Rennbedingungen sicher, die eine Situation schaffen, in der der nächste Wert niedriger als ein vorhandener Wert ist. Allerdings gibt es keine Garantie dafür, dass die Zeilen festgeschrieben werden in der Reihenfolge ihrer Identitätswerte. Zum Beispiel:

  1. Öffnen Sie eine Transaktion, fügen Sie sie mit einer Identitätsspalte in Ihre Tabelle ein. Nehmen wir an, es bekommt den Wert 42.
  2. Einen anderen Wert in dieselbe Tabelle einfügen und festschreiben. Nehmen wir an, es erhält den Wert 43.

Bis die erste Transaktion festgeschrieben ist, existiert 43, aber 42 nicht. Die Identitätsspalte reserviert einfach einen Wert, sie diktiert nicht die Reihenfolge der Commits.