Когда несколько транзакций работают с одними данными, возможны проблемы. Уровень изоляции определяет, насколько строго СУБД защищает данные от таких эффектов.
Пример настройки перед транзакцией (зависит от СУБД):
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM accounts WHERE id = 1;
Основные Уровни:
READ UNCOMMITTED — минимальная защита, возможны «грязные» чтения:SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
READ COMMITTED — предотвращает грязные чтения, но допускает неповторяемые и фантомные:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
REPEATABLE READ — одни и те же строки возвращают одинаковые значения в рамках транзакции (поведение с фантомами зависит от СУБД):SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SERIALIZABLE — максимальная изоляция: транзакции выполняются так, будто идут строго последовательно.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
🔥 Правильный уровень изоляции обеспечивает предсказуемость и надёжность даже при высокой конкуренции.
➡️ SQL Ready | #практика