Ответ
Чтение незафиксированных данных (Dirty Read) — это аномалия, при которой транзакция видит изменения, сделанные другой, еще не завершенной транзакцией. Если та транзакция откатится, первая прочитает несуществующие данные.
Управление через уровни изоляции (ANSI SQL):
| Уровень изоляции | Dirty Read | Пояснение |
|---|---|---|
| READ UNCOMMITTED | Разрешен | Самый низкий уровень. Транзакции видят незафиксированные изменения других. Риск несогласованности. |
| READ COMMITTED | Запрещен | Стандартный уровень в многих СУБД. Гарантирует, что читаются только зафиксированные данные. |
| REPEATABLE READ и SERIALIZABLE | Запрещен | Более строгие уровни, решающие и другие аномалии. |
Пример на SQL:
-- Сессия 1
BEGIN TRANSACTION;
UPDATE accounts SET balance = 1500 WHERE user_id = 1; -- Не COMMIT еще!
-- Сессия 2 (с уровнем READ UNCOMMITTED)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT balance FROM accounts WHERE user_id = 1; -- Увидит 1500 (Dirty Read)!
-- Если Сессия 1 сделает ROLLBACK, баланс на самом деле останется старым.
Вывод: READ UNCOMMITTED используется крайне редко (например, для агрегатных аналитических запросов, где точность не критична). В большинстве приложений используется READ COMMITTED или строже.