Встречается на собеседованиях • сегодня
Что произойдет, если две транзакции пытаются изменить одну запись в БД
При одновременном изменении одной записи двумя транзакциями поведение зависит от уровня изоляции БД:
- READ COMMITTED (по умолчанию в PostgreSQL): Вторая транзакция будет ждать, пока первая завершится (commit/rollback). Если первая делает commit, вторая увидит изменения и будет работать с обновленными данными. Если rollback - вторая продолжит с исходными данными.
- SERIALIZABLE: Одна из транзакций получит ошибку сериализации (например,
SerializationErrorв PostgreSQL), и её нужно будет перезапустить.
Пример конфликта в Django:
python
# Транзакция 1
with transaction.atomic():
obj = MyModel.objects.select_for_update().get(pk=1)
obj.counter += 1
obj.save()
# Транзакция 2 заблокируется здесь до завершения этой
# Транзакция 2 (параллельно)
with transaction.atomic():
obj = MyModel.objects.select_for_update().get(pk=1) # Блокировка
obj.counter += 10
obj.save()Для обработки конфликтов часто используют:
- Оптимистичные блокировки (версионирование)
- Повторные попытки (retry)
- Явные блокировки (SELECT FOR UPDATE)

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы