Za předpokladu, že se jedná o MS SQL server, budete pravděpodobně chtít UPDLOCK
, případně v kombinaci s ROWLOCK
(Nápovědy k tabulkám
). Mám problém najít slušný článek, který popisuje teorii, ale zde je rychlý příklad:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
Toto prohlášení zablokuje aktualizační zámek na řádku po dobu trvání transakce (je proto důležité si uvědomit, kdy transakce skončí). Protože aktualizační zámky jsou nekompatibilní s exkluzivními zámky (vyžadováno k aktualizaci záznamů), toto zabrání komukoli v aktualizaci tohoto záznamu, dokud transakce neskončí.
Všimněte si, že ostatní procesy, které se pokoušejí upravit tento záznam, budou zablokovány, dokud nebude transakce dokončena, ale budou pokračovat v jakékoli operaci zápisu, kterou požadovali, jakmile transakce skončí (pokud jim nevypršel časový limit nebo nebudou ukončeny jako uváznutý proces). Chcete-li tomu zabránit, vaše ostatní procesy musí použít další rady, aby se buď zrušily, pokud je detekován nekompatibilní zámek, nebo přeskočily záznam, pokud se změnil.
Tuto metodu byste také neměli používat k zamykání záznamů při čekání na vstup uživatele . Pokud je to vaším záměrem, měli byste do tabulky místo toho přidat nějaký druh sloupce „upravuje se“.
Uzamykací mechanismy serveru SQL jsou skutečně vhodné pouze pro použití k zachování integrity dat / zabránění uváznutí - transakce by obecně měly být co nejkratší a rozhodně by neměl být udržován při čekání na vstup uživatele.