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

Jak provést zámek řádku?

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.



  1. Jak mohu použít operátor Postgresql ANY v příkazu NOT IN

  2. Different() funkce (ne select qualifier) ​​v postgresu

  3. Jedinečné pouzdro na klíče není citlivé

  4. Chyba:Nekompatibilní kódování znaků:UTF-8 a ASCII-8BIT