Как повторить попытку вставки в базу данных, если уже сохранено такое уникальное значение
Я искал любые существующие образцы, но ничего не случилось.
Итак, дело в том, что я хочу хранить в своей базе данных 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
}
});
}