Уникальный ответ из базы множестве запрсоов

есть подобный код

<?php
 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$link = mysqli_connect('localhost', 'root', '', 'test');
  


if(!$link) {
    die('Ошибка подключения ( '.mysqli_connect_errno().' ) '.mysqli_connect_error());
}


$sql = "SELECT id,key FROM keys WHERE status = 1 LIMIT 1";
$result = $link->query($sql);

if ($result->num_rows > 0) {

    while($row = mysqli_fetch_assoc($result)) {  
        echo $row['key'];
        $link->query("UPDATE `keys` SET `status` = '0' WHERE `id` = ".(int)$row['id']);
    }
 
 
} 


$link->close();

Его задача выдать из базы уникальный ключ. Взять первую запись у которой статус еще не выдано, показать ее пользователю, обновить статус.

Но есть проблема, что когда частые запросы, оно не успевает проставить статус и в итоге отдает один и тот же ключ а так быть не должно.

Я нагуглил про проблему race condition, но внятных каких то примеров как решить не нашел


Ответы (0 шт):