Как добавить несколько строк в базу данных 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
предложение может содержать список(?, ?)
фразы. Вы можете построить запрос с количеством пар, соответствующим количеству пар, которые вы хотите вставить, а затем выполнить для этого всего один запрос.