Bazy danych w celu uniknięcia problemów z równoległym dostępem do danych udostępniają mechanizm blokowania (database lock).
Czego może dotyczyć blokada?
Blokada może dotyczyć różnych elementów bazy danych, takich jak:
- całej bazy danych
- plików (przechowujących dane)
- strony (struktura za pomocą której przechowywane są dane w plikach)
- tabeli
- kolumny (nie jest wspierane przez wszystkie bazy danych)
- wiersza
Typy blokad
Blokada współdzielona (shared lock) – jest tworzona przy odczycie danych. Pozwala innym transakcjom tylko na współbieżny odczyt, jeśli będą chciały coś zmodyfikować to muszą czekać na zwolnienie blokady.
Przykład: Jeśli użytkownik A rozpocznie odczyt danych, to na cały czas trwania odczytu będzie przydzielona blokada współdzielona, przez co użytkownik B (chcący dokonać modyfikacji zasobu będzie musiał poczekać na zwolnienie blokady. A użytkownik C (chcący odczytać dane z zasobu) nie będzie musiał czekać na zwolnienie blokady, co ilustruje poniższy obraz:

Blokada wyłączająca (exclusive lock) – jest ustanawiana przy modyfikacji danych. Blokuje inne transakcje przed jakimikolwiek operacjami.
Przykład: Jeśli użytkownik A rozpocznie modyfikację zasobu, to zarówno użytkownik B (chcący dokonać modyfikacji) jak i użytkownik C (chcący dokonać odczytu), będą musieli poczekać na zwolnienie blokady, co ilustruje poniższy obraz:

Ciekawostki
- Ustanowienie połączenia do bazy danych powoduje powstanie współdzielonej blokady – przez co inne sesje nie mogą zrobić na przykład drop database dopóki ustanowione połączenie nie zostanie zamknięte.
- Niektóre bazy danych udostępniają też inne rodzaje blokad:
https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html
https://www.postgresql.org/docs/current/explicit-locking.html