Этот вопрос закрыт для ответов, так как повторяет вопрос Как организовать внос данных в базу данных?

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

Подключение к бд:
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test',
});

Код сохранения записи в бд:
const sql = `INSERT INTO books (${keys}) VALUES (${values})`;

  db.query(sql, (error, results) => {
    if (error) {
      console.log(`Произошла ошибка во время отправки запроса: ${error}`);
    } else {
      return console.log('Запрос прошёл успешно');
    }
  });

Нужно проверить каждый элемент из массива ответа по id, не был ли он уже записан ранее (select id from books where bookId= id).
По нику пользователя из ответа находим автора в нашей базе (select authorId from users where nick= nick)
Может быть не найдено записей с таким nick, либо authorId будет null. Тогда сохранение в бд прекращается.

Как организовать такой код? Делать несколько последовательных запросов? Как решить через условия where?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Во-первых, надо создать в таблице уникальный индекс по полю, которое не должно содержать дубликатов.
Во-вторых, надо использовать INSERT IGNORE INTO, чтобы дублирование одного значения не обваливало весь вставляемый массив. Либо REPLACE INTO, если при дублировании надо полностью заменить старую запись новой. Либо INSERT ODKU, если надо обновить старые данные новыми по некоей логике (например, вставить значения в поля, в которых раньше было NULL, а теперь пришло что-то определённое). Это - для MySQL, в других СУБД синтаксис с аналогичными возможностями будет иным.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы