Какие знаешь типы блокировок бд

«Какие знаешь типы блокировок бд» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Golang при работе с БД часто используются следующие типы блокировок:

  1. Эксклюзивные (X-lock) - запрещают другим транзакциям читать/изменять данные. Используются при записи.
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
-- изменение данных
COMMIT;
  1. Разделяемые (S-lock) - разрешают чтение, но запрещают изменение. Используются при чтении:
SELECT * FROM accounts WHERE id = 1 LOCK IN SHARE MODE;
  1. Оптимистичные - проверяют версию записи перед изменением:
var version int
err := db.QueryRow("SELECT version FROM accounts WHERE id = 1").Scan(&version)
// проверка version перед обновлением
  1. Пессимистичные - блокируют запись сразу при SELECT.

Также существуют блокировки на уровне таблиц, строк и страниц. В Postgres есть advisory locks для гибкой блокировки.