@vetsmen

Могут ли 2 запроса выполниться одновременно?

Есть такой кусок кода функции:

var updater = function() {
mysql.query('SELECT balance FROM Users WHERE id = 5').then(function(balance){
   if(balance < 100) {
      return;
   }
   mysql.query('UPDATE Users SET balance = balance - 100 WHERE id = 5').then(function(res){
      return;
   });
});
}

Если 2 раза подряд вызвать эту функцию, возможна ли такая ситуация, что запрос на update не успеет выполниться и во второй раз не сработает проверка?
  • Вопрос задан
  • 425 просмотров
Решения вопроса 1
0xD34F
@0xD34F
А почему бы не написать один запрос и не париться по поводу успеет оно там выполниться или нет? Как-то так:

UPDATE Users SET
  balance = balance - 100
WHERE id = 5 AND balance >= 100
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
да, такая ситуация может быть, в твоем случае тебе уже предложили решение, упросив запрос, но бывают другие случаи, в которых стоит использовать sql транзакции, правильно навешивать unique индексы, чтобы не получалось дублей при конфликтующих запросах
Ответ написан
Комментировать
@heahoh
Full stackoverflow developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы