Ответ
Уровень изоляции транзакций определяет, насколько транзакции видят изменения друг друга, предотвращая аномалии (грязное чтение, неповторяемое чтение, фантомы).
Основные уровни (по стандарту SQL):
- Read Uncommitted — видит незафиксированные изменения других транзакций (грязное чтение).
- Read Committed — только зафиксированные данные (исключает грязное чтение).
- Repeatable Read — гарантирует, что повторные чтения в транзакции вернут те же данные (исключает неповторяемое чтение).
- Serializable — полная изоляция, как если бы транзакции выполнялись последовательно.
Пример настройки в PostgreSQL:
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- операции
COMMIT;
В Golang (с database/sql):
db.Exec("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ")
Чем выше уровень, тем строже изоляция, но ниже производительность.