Нужна ли проверка на наличие записи при добавлении новых в MySQL?
Имеются таблицы systems, coords с уникальным полем id. Часто бывают запросы на добавление записи с уже имеющимся id, пока проверки нету то бд сама проверит и вернет исключение, вопрос в том что нужно ли дописывать проверку на наличие id или все оставить на реализацию в самой бд. По сути выполним свою проверку, но бд потом выполнит свою все равно и думаю какое то влияние на загруженность да будет.
Немного пояснений: данные берутся с апи и добавляются в таблицу если их нет.
Как выглядит обработчик данных
void EdsmApiParse::getResponse(QNetworkReply *reply)
{
qDebug() << "Response";
// Если ошибки отсутсвуют
if(!reply->error()){
QJsonArray document = QJsonDocument::fromJson(reply->readAll()).array();
db.connectToDataBase();
for(auto el:document)
{
data.push_back(el.toObject()["id"].toVariant());
data.push_back(el.toObject()["name"].toVariant());
data.push_back(el.toObject()["bodyCount"].toVariant());
data.push_back(el.toObject()["distance"].toVariant());
qDebug() <<data[0].toInt()<<data[1].toString()<<data[2].toInt() <<data[3].toFloat();
db.insertIntoSystems(std::move(data));
data.push_back(el.toObject()["id"].toVariant());
data.push_back(el.toObject()["coords"].toObject()["x"].toVariant());
data.push_back(el.toObject()["coords"].toObject()["y"].toVariant());
data.push_back(el.toObject()["coords"].toObject()["z"].toVariant());
db.insertIntoCoords(std::move(data));
}
}
reply->deleteLater();
}
и отправка запроса
bool DataBaseJob::insertIntoCoords(const QVariantList data)
{
QSqlQuery query;
query.prepare("INSERT INTO coords (id, x, y, z)"
"VALUES (:id, :x, :y, :z)");
query.bindValue(":id", data[0].toInt());
query.bindValue(":x", data[1].toFloat());
query.bindValue(":y", data[2].toFloat());
query.bindValue(":z", data[3].toFloat());
if(!query.exec()){
qDebug() << "error insert into coords";
qDebug() << query.lastError().text();
return false;
} else {
return true;
}
return false;
}