Как добавить несколько строк в базу данных SQL с помощью MySQL в приложении REST

Я разрабатываю внутренний маршрут для своего приложения, и ему необходимо добавить несколько строк (по одной строке для каждого элемента в массиве, полученном от клиентского клиента). Моя первая мысль – просто сделатьforпрокрутите мои данные и выполните запрос к базе данных для каждого элемента массива, как показано ниже:

      router.get('api/postGuests', (req, res) => {
  const arrayOfPeople = req.body;
  // arrayOfPeople looks like this for example: [{name: Jason, age: 24}, {name: Tyler, age: 34}]

  for (let i=0; i<arrayOfPeople.length; i++) {
    db.query('INSERT INTO people (name, age) VALUES (?, ?)', [arrayofPeople[i].name, arrayOfPeople[i].age])
  }
})

Проблема в том, что я не считаю эффективным делать отдельный запрос для каждой строки, и, учитывая, что эти запросы являются асинхронными, я вижу, что при масштабировании возникает множество проблем.

Может ли кто-нибудь дать мне несколько советов, как лучше всего справиться с этой ситуацией? Спасибо!

2 ответа

Нет необходимости использовать несколько операторов. Вы можете вставить несколько строк однимINSERTзаявление.

Просто скорректируйте подготовленный оператор и передайте все значения сразу. Обратите внимание, что аргумент, переданный вdb.queryдолжен быть массивом массивов, заключенным в массив.

Короткий пример:

      const arrayOfPeople = [
    {name: "Jason", age: 24}, 
    {name: "Tyler", age: 34},
    ...
];

db.query(
    'INSERT INTO people (name, age) VALUES ?',
    [arrayOfPeople.map(item => [item.name, item.age])]
);

The VALUESпредложение может содержать список(?, ?)фразы. Вы можете построить запрос с количеством пар, соответствующим количеству пар, которые вы хотите вставить, а затем выполнить для этого всего один запрос.

Другие вопросы по тегам