У меня есть случай, когда я не хочу повторно обрабатывать заказ, если он уже обрабатывается. Для этого я прямо возвращаюсь из функции, если столбец order_status настроен на обработку другим запросом, который был до меня. Поэтому для этого я обновляю строку в БД (с помощью указанного ниже запроса) и проверяю, была ли изменена строка. Если он изменен, то мы в безопасности, иначе это означает, что заказ уже обрабатывается, и я сейчас вернусь.
Тем не менее, меня сейчас смущает феномен потерянных обновлений. Я имею в виду, это безопасно для параллелизма ? Или я должен сделать что-то еще, чтобы обеспечить безопасность параллелизма. По сути, у меня есть запрос sql, который выглядит следующим образом.
Update table orders set order_status='processing' where id = 10;
Уровень изоляции моего БД равен Повторяемое чтение (mysql) , а двигатель БД InnoDb .
Допустим, существует сценарий, в котором два одновременных запроса запускают один и тот же запрос одновременно (ie, обновляя один и тот же столбец с тем же значением с тем же предложением where).
Может ли случиться так, что в любом случае результат этих двух одновременных запросов будет одинаковым. ie 1 строка изменена ?