sql >> Database >  >> RDS >> Sqlserver

Garandeert SQL Server sequentiële invoeging van een identiteitskolom?

Gegarandeerd dat u in geen enkel geval een waarde kunt krijgen die lager is dan of gelijk is aan de huidige maximale waarde? Nee, die garantie is er niet. Dat gezegd hebbende, zijn de omstandigheden waaronder dat scenario zou kunnen gebeuren beperkt:

  1. Iemand schakelt het invoegen van identiteit uit en voegt een waarde in.
  2. Iemand leest de identiteitskolom opnieuw.
  3. Iemand verandert het teken van de verhogingswaarde (d.w.z. in plaats van +1 wordt het gewijzigd in -1)

Ervan uitgaande dat geen van deze omstandigheden optreedt, bent u veilig voor race-omstandigheden die een situatie creëren waarin de volgende waarde lager is dan een bestaande waarde. Dat gezegd hebbende, is er geen garantie dat de rijen worden vastgelegd in de volgorde van hun identiteitswaarden. Bijvoorbeeld:

  1. Open een transactie, plaats deze in uw tabel met een identiteitskolom. Laten we zeggen dat het de waarde 42 krijgt.
  2. Voeg een andere waarde in en commit in dezelfde tabel. Laten we zeggen dat het waarde 43 krijgt.

Totdat de eerste transactie is vastgelegd, bestaat 43 maar 42 niet. De identiteitskolom reserveert gewoon een waarde, het dicteert niet de volgorde van commits.



  1. Uitsluitingsbeperking op een bitstringkolom met bitsgewijze AND-operator

  2. PHP MySQL PDO TextArea Where-clausule met conditiecontroles

  3. Worden PDO-statements automatisch escaped?

  4. Een procedure maken in mySql met parameters