sql >> Databáze >  >> RDS >> Sqlserver

Zaručuje SQL Server sekvenční vkládání sloupce identity?

Garantováno jako absolutně za žádných okolností, že byste nemohli získat hodnotu, která by mohla být nižší nebo rovna aktuální maximální hodnotě? Ne, taková záruka neexistuje. To znamená, že okolnosti, za kterých by k tomuto scénáři mohlo dojít, jsou omezené:

  1. Někdo zakáže vkládání identity a vloží hodnotu.
  2. Někdo znovu zasévá sloupec identity.
  3. Někdo změní znaménko hodnoty přírůstku (tj. místo +1 se změní na -1)

Za předpokladu, že žádná z těchto okolností nebude, jste v bezpečí před závodními podmínkami, které vytvoří situaci, kdy další hodnota bude nižší než stávající hodnota. To znamená, že neexistuje žádná záruka, že řádky budou potvrzeny v pořadí jejich hodnot identity. Například:

  1. Otevřete transakci a vložte ji do tabulky se sloupcem identity. Řekněme, že dostane hodnotu 42.
  2. Vložte a potvrďte do stejné tabulky jinou hodnotu. Řekněme, že dostane hodnotu 43.

Dokud není potvrzena první transakce, 43 existuje, ale 42 ne. Sloupec identity pouze rezervuje hodnotu, neurčuje pořadí odevzdání.



  1. Problémy s T-SQL TRY CATCH?

  2. Rails &MSSQL 2008 – Narazíme na bariéry?

  3. Dotaz MySQL pro získání produktů WooCommerce podle názvu kategorie

  4. SQLException:Tato sada výsledků je uzavřena