如何在REST应用程序上使用MySQL向SQL数据库添加多行



我正在为我的应用程序开发一个后端路由,它需要添加多行(从客户端客户端接收的数组中的每个项目一行)。我的第一个想法是通过我的数据做一个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])
}
})

问题是我不认为它是有效的为每一行做一个单独的查询,并且考虑到这些查询是异步的,我可以看到有很多问题出现在我的规模。

谁能给我一些建议,如何最好地处理这种情况?谢谢你!

不需要使用多个语句。您可以使用单个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])]
);

VALUES子句可以包含(?, ?)短语列表。您可以使用与您想要插入的对数量相对应的数来构建查询,然后只执行一个查询来完成它。

最新更新