@Popa_Russkaya

Как избежать race condition при вставки новой записи в бд SQL, PHP?

Привет!

Как можно безопасно вставить новую запись в базу данных избежав повторной вставки (при race condition).
Есть такой код:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
    $dbh->beginTransaction();

$result = $dbh->exec("INSERT INTO `rating` (`ID`, `count`, `post_id`, `user_id`, `sign_ts`, `date`) SELECT NULL, '4', '1', '1', '".$id."', CURRENT_TIMESTAMP FROM DUAL WHERE NOT EXISTS (SELECT * FROM `rating` WHERE `sign_ts`='".$id."' FOR UPDATE)");

        if($result){
            echo "Запись вставлена";
            echo $dbh->commit();
            } else {
        $dbh->rollBack();
            }


Если есть какие то предложения, буду рад вашему ответу, спасибо.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 2
Создайте в таблице какой-то уникальный индекс, основанный на ваших данных, и второй раз одни и те же данные просто не получится вставить.
Ответ написан
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
используйте оператор replace вместо insert.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы