Как повторить попытку вставки в базу данных, если уже сохранено такое уникальное значение

Я искал любые существующие образцы, но ничего не случилось.

Итак, дело в том, что я хочу хранить в своей базе данных MySQL некоторые key значение, которое было бы уникальным. Я генерирую это на стороне сервера следующим образом:

var pc = require('password-creator');
var key = pc.create(20); //  "f9Wp>=\qJqx]rwwbbiQ8

Затем я отправляю его в базу данных:

 connection.query(db_query, function (err, rows, fields) {
    if(err){
        if(err.code == "ER_DUP_ENTRY"){
            // here I could attempt again with newly generated key by
            // calling another query to database but this is giving me 
            // a limited amount of such attempts
        }
    }
    else{
        // there was no duplicate
    }
});

Так что все выглядит хорошо, но есть небольшая возможность получить ER_DUP_ENTRY, А теперь мой вопрос:

Как правильно решить такую ​​ситуацию? Я имею в виду, что я всегда хочу ввести некоторые key значение в базе данных. Я думал о циклах, но это кажется глупым, потому что это асинхронный запрос к базе данных. Я в основном ищу правильный подход в таких ситуациях.

1 ответ

Решение

Это должно быть так же просто, как завершение вашего блока кода "генерировать уникальное значение и вставить" в функцию, которую вы можете повторно вызвать, если возникает двойной ключ:

function tryToStoreUnique()
{
    var db_query = buildDbQuery(pc.create(20));
    connection.query(db_query, function (err, rows, fields) {
    if(err) {
        if(err.code == "ER_DUP_ENTRY"){
           // you can add counter to avoid lock if most of unique space is occupied
           tryToStoreUnique();
        }
    }
    else{
        // there was no duplicate
    }
  });
}
Другие вопросы по тегам