Что такое уровень изоляции транзакций в БД

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

Ответ

Уровень изоляции транзакций определяет, насколько транзакции видят изменения друг друга, предотвращая аномалии (грязное чтение, неповторяемое чтение, фантомы).

Основные уровни (по стандарту SQL):

  1. Read Uncommitted — видит незафиксированные изменения других транзакций (грязное чтение).
  2. Read Committed — только зафиксированные данные (исключает грязное чтение).
  3. Repeatable Read — гарантирует, что повторные чтения в транзакции вернут те же данные (исключает неповторяемое чтение).
  4. Serializable — полная изоляция, как если бы транзакции выполнялись последовательно.

Пример настройки в PostgreSQL:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- операции
COMMIT;

В Golang (с database/sql):

db.Exec("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ")

Чем выше уровень, тем строже изоляция, но ниже производительность.