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

Zablokování při SELECT/UPDATE

Nestačí mít serializovatelnou transakci, musíte naznačit zamykání, aby to fungovalo.

Úroveň serializovatelné izolace bude stále obvykle získávat „nejslabší“ typ zámku, který může zajistit, že budou splněny podmínky pro serializaci (opakovatelné čtení, žádné fantomové řádky atd.)

Získáváte tedy sdílený zámek na vašem stole, který se později (ve své serializovatelné transakci) pokoušíte upgradovat na zámek aktualizace. Upgrade se nezdaří, pokud sdílený zámek drží jiné vlákno (bude fungovat, pokud žádné jiné tělo drží sdílený zámek).

Pravděpodobně jej budete chtít změnit na následující:

SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId

To zajistí, že při provedení SELECT bude získán aktualizační zámek (takže nebudete muset aktualizovat zámek).




  1. MySQL selže na:mysql ERROR 1524 (HY000):Plugin 'auth_socket' není načten

  2. Aktualizujte data v databázi MySQL

  3. Podání Jframe z MySQL

  4. Počítejte neprázdná pole mysql