javascript - 如何在 REST 应用程序上使用 MySQL 将多行添加到 SQL 数据库

标签 javascript mysql sql rest bulk-create

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

关于javascript - 如何在 REST 应用程序上使用 MySQL 将多行添加到 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75959024/

相关文章:

javascript - 我可以在 javascript 中找到函数参数的类名吗?

javascript - .preventDefault() 在条件中不起作用

mysql - DataGrip 默认将 SQL_SAFE_UPDATES 设置为 ON

mysql - SQL:空列计数不正确

java - Java 的 SQL JDBC 拦截器,可以跟踪可疑的 SQL 查询

javascript - Chrome 控制台 - 整个文件的断点

javascript - 如何删除 jquery 模态表单并将其保留为页面底部的简单 html 表单

php - 合并特定年份的 MySQL 表

mysql - 使用 Pentaho 数据集成的 Amazon Redshift 到 Mysql

php - 函数在 mysql 中显示数据截断列的警告