如何使用 node.js 在 mySQL 中进行批量更新

Posted

技术标签:

【中文标题】如何使用 node.js 在 mySQL 中进行批量更新【英文标题】:How do I do a bulk update in mySQL using node.js 【发布时间】:2016-09-21 18:41:14 【问题描述】:

我想批量更新数据我在节点 JS 的对象数组中有超过 50 行要更新。就像是 https://github.com/felixge/node-mysql 和How do I do a bulk insert in mySQL using node.js

var updateData=[ 
    a: '15',b: 1,c: '24',d: 9,e: 1,f: 0,g: 0,h: 5850,i: 78 ,
    a: '12',b: 1,c: '21',d: 9,e: 1,f: 0,g: 0,h: 55,i: 78 ,
    a: '13',b: 1,c: '34',d: 9,e: 1,f: 0,g: 0,h: 58,i: 78 ,
    a: '14',b: 1,c: '45',d: 9,e: 1,f: 0,g: 0,h: 585,i:78 ,
    a: '16',b: 1,c: '49',d: 9,e: 1,f: 0,g: 0,h: 85,i: 78  
]
my query is : update table set a= updateData.a ,b= updateData.b ,c = updateData.c , d==updateData.d ,e=updateData.e,f=updateData.f where e=updateData.e

【问题讨论】:

这能回答你的问题吗? Updating multiple rows with node-mysql, NodeJS and Q 【参考方案1】:

您可以通过在 mysql 连接中启用多语句功能来完成此操作。然后你可以遍历你的 updateData 并构造用';'分隔的 mysql 语句。你可以看到这个in this answer的例子。

【讨论】:

【参考方案2】:

据我所知,在 mySQL 中没有直接的方法可以批量更新记录。但是有一个解决方法 - 您可以执行多个插入语句,然后执行查询以获得所需的结果。

为此,在创建连接时允许它执行多个语句,因为默认情况下它是禁用的。

var connection = mysql.createConnection(
          host     : dbConfig.host,
          user     : dbConfig.user,
          password : dbConfig.password,
          database : dbConfig.database,
          multipleStatements: true
 );

然后,通过操作您的输入,按照以下语法构造批量更新查询。

查询1;查询2;查询3;

比如说,

 update table set a='15', b=1, c='24', d=9, e=1, f=0, g=0, h=5850, i=78;update table set a='12', b=1, c='21', d=9, e=1, f=0, g=0, h=5850, i=78;

然后,照常执行查询,

connection.query(sqlQuery, params, callback);

希望这会有所帮助。

【讨论】:

【参考方案3】:

使用 node-MySQL 批量更新数据确实不容易,但如果你可以在前端使用 .map 函数,你可以做一个替代方案。让我告诉你我用我的做了什么--

只需制作一个更新 API 并在您的前端像这样使用它-

 updateData.map((item, key)=>
    return (
        axios.path('/api/update', 
            a: item.a,
            b: item.b,
            c: item.c
        )
    ).then(()=> console.log('updated'))
    .catch((err)=> console.log(err))
)

【讨论】:

【参考方案4】:

回答有点晚,但使用 MySQL JSON_TABLE 会有所帮助。这是一个工作示例:

UPDATE person a
INNER JOIN (
    SELECT
        personId, addressType, addressId 
    FROM JSON_TABLE('
        [
            "personId": 318, "addressType": "Primary", "addressId": 712,
            "personId": 319, "addressType": "Shipping", "addressId": 712
        ]',
        '$[*]' COLUMNS(
            personId INT PATH '$.personId',
            addressType VARCHAR(10) path '$.addressType', 
            addressId INT path '$.addressId')
    ) a) b
ON a.personId = b.personId
SET
    a.addressId = b.addressId,
    a.addressType = b.addressType;

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何使用 node.js 在 mySQL 中进行批量更新的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 插入多个 mysql 查询?

使用 socket.io 在 Node.js 中使用 MySql 数据库进行 HTML5 页面日志记录

阿里开源的企业级Node.js框架egg应如何看待?

如何使用 mysljs 在 mySql 和 node.js 中批量插入

如何使用node.js在mySQL中插入数组[重复]

如何在 node.js 中使用 token(post) Mysql?