Могут ли два одновременных запроса на обновление одной и той же строки привести к явлению потерянного обновления, если уровень изоляции повторяемый-читаемый? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть случай, когда я не хочу повторно обрабатывать заказ, если он уже обрабатывается. Для этого я прямо возвращаюсь из функции, если столбец order_status настроен на обработку другим запросом, который был до меня. Поэтому для этого я обновляю строку в БД (с помощью указанного ниже запроса) и проверяю, была ли изменена строка. Если он изменен, то мы в безопасности, иначе это означает, что заказ уже обрабатывается, и я сейчас вернусь.

Тем не менее, меня сейчас смущает феномен потерянных обновлений. Я имею в виду, это безопасно для параллелизма ? Или я должен сделать что-то еще, чтобы обеспечить безопасность параллелизма. По сути, у меня есть запрос sql, который выглядит следующим образом.

Update table orders set order_status='processing' where id = 10;

Уровень изоляции моего БД равен Повторяемое чтение (mysql) , а двигатель БД InnoDb .

Допустим, существует сценарий, в котором два одновременных запроса запускают один и тот же запрос одновременно (ie, обновляя один и тот же столбец с тем же значением с тем же предложением where).

Может ли случиться так, что в любом случае результат этих двух одновременных запросов будет одинаковым. ie 1 строка изменена ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...