У меня есть простая настройка для назначения противников в игре. В принципе, если matchID равен нулю (значение исходит из другого места), необходимо создать новое соответствие, и он будет выполнять выбор mysql в последней записи matchID, чтобы убедиться, что кто-то ждет матча или нет.MySql: Как удалить задержку между SELECT и UPDATE
Чтобы узнать, ждет ли игрок, мы можем видеть, что пространство teamB равно нулю (не принято). Если команда teamB имеет значение, то никто не ждет, и новый игрок должен быть создан с этим игроком в качестве «команды A».
Код выглядит следующим образом:
if ($matchID == 0)
{
$teamBquery = $conn ->query("SELECT matchID,teamBID,teamAID FROM challengeMatches ORDER BY matchID DESC LIMIT 1 ");
$teamBarray = $teamBquery->fetch(PDO::FETCH_ASSOC);
$teamBID=$teamBarray[teamBID];
$matchID=$teamBarray[matchID];
$teamAID=$teamBarray[teamAID];
if ($teamBID == 0){
$newChallenge = $conn ->query ("UPDATE challengeMatches SET managerBID='$managerID', teamBID='$teamID',matchStatus=1 WHERE matchID='$matchID'");
}else{
$filler = 0;
$matchID = $matchID+1;
$newChallenge = $conn ->query ("INSERT INTO challengeMatches (matchID,managerAID,managerBID,matchStatus,teamAID,teamBID) VALUES ('','$managerID','$filler','$filler','$teamID','$filler')");
}
}
Моя забота, как кто-то довольно неопытным в том, что, насколько я могу видеть, что будет задержка между выбором информации и обновления информации и так технически два MySQL выбирает может возвращать тот же идентификатор соответствия, который будет использоваться. И тогда даже использование matchID + 1 как переменной является рискованным, потому что оно может быть не синхронизировано с идентификатором match-auto-increment, который создается в базе данных.
Являются ли мои страхи основаны или являются кодом так быстро, что вероятность не стоит беспокоиться?
Если я должен волноваться, что я могу сделать?
Время, затрачиваемое на выполнение, зависит в первую очередь от вашего системного оборудования. Обычно для выполнения всего файла требуется ~ 1 микросекунда или менее. – hjpotter92
@ Решите, поэтому я не должен волноваться? Я прочитал немного сегодня утром, с подобными запираниями/innodb, но кажется, что излишне. – Gamemorize
Если вы хотите получить лучшие результаты, пусть MySQL сделает всю работу за вас. Используйте транзакции. – hjpotter92