Встречается на собеседованиях • сегодня
Что такое гонка значений БД
Гонка значений (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()
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы