Две транзакции открывают промежуточное состояние: старый ключ уже изменён или удалён, а связанные данные ещё не согласованы. Сбой между шагами может оставить операцию наполовину выполненной.
Если мы делаем смену Primary Key не в одной транзакции, а в двух разных транзакциях, какую проблему мы можем получить?
Две транзакции открывают промежуточное состояние: старый ключ уже изменён или удалён, а связанные данные ещё не согласованы. Сбой между шагами может оставить операцию наполовину выполненной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Две транзакции открывают промежуточное состояние: старый ключ уже изменён или удалён, а связанные данные ещё не согласованы. Сбой между шагами может оставить операцию наполовину выполненной.
Другой запрос может увидеть неполную миграцию или записать данные со старым идентификатором. Внешние ключи могут заблокировать первый шаг, но отсутствие ошибки не гарантирует согласованность всего приложения. Если изменение действительно нужно, связанные записи обновляют в одной транзакции с подходящими ограничениями, например каскадным обновлением там, где оно предусмотрено. Для большой онлайн-миграции используют expand-contract и совместимость старого/нового идентификатора, а не две несвязанные записи. Лучше заранее выбирать стабильный primary key.