Встречается на собеседованиях • сегодня

Что такое гонка значений БД

Гонка значений (race condition) в БД возникает, когда несколько транзакций одновременно пытаются изменить одни и те же данные, и итоговый результат зависит от порядка их выполнения. Это может привести к потере обновлений или некорректным данным.

Пример с SQL (PostgreSQL):

sql
-- Транзакция 1
BEGIN;
SELECT balance FROM accounts WHERE id = 1; -- Читает 100
-- Транзакция 2 тоже читает 100
UPDATE accounts SET balance = 100 + 50 WHERE id = 1; -- Пишет 150
COMMIT;

-- Транзакция 2
BEGIN;
SELECT balance FROM accounts WHERE id = 1; -- Читает 100 (еще не видит изменения)
UPDATE accounts SET balance = 100 + 30 WHERE id = 1; -- Пишет 130, перезаписывая 150
COMMIT;

text

Способы предотвращения:
1. Использование транзакций с нужным уровнем изоляции
2. Оптимистичные блокировки (версионирование)
3. Пессимистичные блокировки (SELECT FOR UPDATE)
4. Уникальные ограничения и атомарные операции

В Django ORM пример пессимистичной блокировки:
```python
from django.db import transaction

with transaction.atomic():
    account = Account.objects.select_for_update().get(id=1)
    account.balance += 100
    account.save()
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы