Zámek ( angl. lock ) v DBMS – značka zachycení objektu transakcí s omezeným nebo výhradním přístupem, aby se zabránilo kolizím a zachovala se integrita dat .
Podle rozsahu jsou zámky klasifikovány na malá písmena, granulární a predikátové. Podle závažnosti se zámky dělí na společné ( anglicky shared ) a exkluzivní (exclusive, anglicky exclusive ). Podle logiky implementace se blokování dělí na optimistické a pesimistické.
Zámek řádků - působí pouze na jeden řádek databázové tabulky, aniž by omezoval manipulace s ostatními řádky tabulky.
Granulární zámek – ovlivňuje celou tabulku nebo celou stránku a všechny řádky. Zámek, který omezuje manipulaci se stránkou dat v tabulce (množina řádků spojených atributem sdíleného úložiště), se někdy nazývá zamykání stránky .
Predikátový zámek působí na oblast ohraničenou predikátem. Obvykle se jedná o zámek na klíč . U takového zámku určuje klíč nebo index hodnotu nebo rozsah hodnot, na které se zámek vztahuje. Takový zámek (stejně jako celotabulkový zámek) mimo jiné chrání před fantomovým čtením a poskytuje úroveň izolace transakcí serializovatelných.
Sdílený zámek je získán transakcí na objektu, pokud je operace, kterou provádí, bezpečná, to znamená, že nemění žádná data a nemá žádné vedlejší účinky . Všechny transakce zároveň mohou provádět operaci stejného typu na objektu, pokud má sdílený zámek, obvykle se takový zámek používá pro operace čtení.
Exkluzivní zámek je umístěn na objekt transakcí, pokud operace, kterou provádí, změní data. Pouze jedna transakce může provést takovou operaci s objektem, pokud má výhradní zámek. Zámek nelze umístit na objekt, pokud již má sdílený zámek.
Pesimistický zámek je umístěn před navrhovanou změnou dat na všech řádcích, u kterých se očekává, že změna ovlivní. Po dobu trvání takového uzamčení je vyloučena úprava dat z relací třetích stran, data z uzamčených řádků jsou dostupná podle úrovně izolace transakce . Po dokončení zamýšlené úpravy je zaručen konzistentní záznam výsledků.
Optimistické zamykání neomezuje úpravy zpracovávaných dat relacemi třetích stran, ale před zahájením navrhované úpravy si vyžádá hodnotu některého vybraného atributu každého z datových řádků (obvykle název VERSIONa typ celého čísla s použije se počáteční hodnota 0). Před zápisem úprav do databáze je znovu zkontrolována hodnota vybraného atributu, a pokud se změnila, transakce je odvolána nebo jsou aplikována různá schémata řešení kolizí. Pokud se hodnota vybraného atributu nezměnila, provede se změny se současnou změnou hodnoty vybraného atributu (například increment ), aby signalizovaly ostatním relacím, že se data změnila.