node+mysql事务回滚及批量更新数据

本文探讨了在Node.js环境中如何使用MySQL进行事务处理,包括事务的开始、回滚和提交,同时详细讲解了如何批量更新数据库中的记录。通过实例代码,展示了在JavaScript中操作MySQL数据库实现数据安全和高效维护的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 //封装事务回滚函数
 2 var mysql = require('mysql');
 3 var async = require("async");
 4 
 5 var pool = mysql.createPool({
 6     host: "localhost",
 7     user: "root",
 8     password: "123456",
 9     database: "test",
10     connectionLimit: 10,
11     port: "3306",
12     waitForConnections: false
13 });
14 
15 function execTrans(sqlparamsEntities, callback) {
16     pool.getConnection(function (err, connection) {
17         if (err) {
18             return callback(err, null);
19         }
20         connection.beginTransaction(function (err) {
21             if (err) {
22                 return callback(err, null);
23             }
24             //console.log("开始执行transaction,共执行" + sqlparamsEntities.length + "条数据");
25             var funcAry = [];
26             sqlparamsEntities.forEach(function (sql_param) {
27                 var temp = function (cb) {
28                     var sql = sql_param.sql;
29                     var param = sql_param.params;
30                     connection.query(sql, param, function (tErr, rows, fields) {
31                         if (tErr) {
32                             connection.rollback(function () {
33                                 console.log("事务失败,
Node.js中使用MySQL进行批量更新,为了优化性能和减少数据库交互次数,可以采用处理语句(PreparedStatement)并使用数组一次性提交多条数据。以下是使用`mysql2`库的一个示例代码: ```javascript const mysql = require('mysql2/promise'); // 创建数据库连接池 const pool = createPool({ host: 'localhost', user: 'your_username', password: 'your_password', database: 'your_database' }); async function batchUpdate(items) { // 使用处理语句避免SQL注入,并准备更新语句 const query = await pool.query` PREPARE updateStatement FROM UPDATE your_table SET column1 = ?, column2 = ? WHERE id IN (${items.map(item => item.id).join(',')}); `; try { // 执行批量更新 await Promise.all(items.map(async (item) => { await pool.execute(query[0].updateStatement, [item.value1, item.value2], { type: 'ROW' }); })); // 提交事务 await pool.commit(); console.log('Batch update completed successfully.'); } catch (error) { // 如果发生错误,回滚事务 await pool.rollback(); console.error('Error during batch update:', error); } finally { // 关闭处理语句 await pool.endTransaction(query[0]); } } // 示例数据 const items = [ { id: 1, value1: 'new_value1', value2: 'new_value2' }, { id: 2, value1: 'another_new_value1', value2: 'another_new_value2' } ]; batchUpdate(items); ``` 在这个例子中,`createPool`函数用于创建一个数据库连接池,`batchUpdate`函数接收一个包含要更新的对象的数组。每个对象有`id`、`value1`和`value2`属性,对应表中的列名。 注意:这只是一个基本的示例,实际生产环境中可能需要处理更复杂的错误情况,比如断线重连等。同时,对于大数据量的批处理操作,可能还需要考虑分页查询或者其他优化策略,以免一次性加载过多数据导致内存压力过大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值