Транзакция останавливает все проблемы состояния состязания в MySQL?

Рассмотрите эту ситуацию:

  1. Начните транзакцию
  2. Вставьте 20 записей в таблицу с auto_increment ключом
  3. Получите первый идентификатор вставки (скажем, это 153)
  4. Обновите все записи в той таблице где id >= 153
  5. Фиксация

Действительно ли шаг 4 безопасен?

Таким образом, если другой запрос входит почти точно одновременно и вставляет еще 20 записей после шага 2 выше, но перед шагом 4, там будет состояние состязания?

7
задан nickf 11 May 2010 в 07:29
поделиться

1 ответ

То есть, если другой запрос приходит почти в то же время и вставляет еще 20 записей после шага 2 выше, но до шага 4, возникнет ли состояние гонки?

Да, будет.

Записи с 21 по 40 будут заблокированы транзакцией 2 .

Транзакция 1 будет заблокирована и будет ждать, пока транзакция 2 не зафиксируется или не откатится.

Если транзакция 2 фиксируется, то транзакция 1 обновит 40 записей (включая те, которые были добавлены транзакцией 2 )

7
ответ дан 7 December 2019 в 07:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: