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

Identita SQL (automatické číslování) se zvyšuje i při vrácení transakce

Pokud o tom přemýšlíte, číslo automatického zvýšení by nemělo být transakční. Pokud by ostatní transakce musely čekat, až uvidí, zda bude automatické číslo použito nebo „vráceno zpět“, budou zablokovány existující transakcí používající automatické číslo. Zvažte například můj pseudokód níže s tabulkou A pomocí pole automatického číslování pro sloupec ID:

User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit


User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit

Pokud transakce uživatele 2 začíná milisekundu po uživateli 1, pak by jeho vložení do tabulky A muselo čekat na dokončení celé transakce uživatele 1, aby se zjistilo, zda bylo použito automatické číslo z prvního vložení do A.

Toto je funkce, nikoli chyba. Doporučil bych použít jiné schéma pro generování automatických čísel, pokud potřebujete, aby byla těsně po sobě jdoucí.



  1. Chyba:Existují nepotvrzené transakce

  2. mysql vytvořit uživatele pouze v případě, že uživatel neexistuje

  3. Jak vyladit LISTAGG tak, aby podporoval více než 4000 znaků ve vybraném dotazu?

  4. Vložit více řádků do databáze MySQL z tabulky