nodejs 以async多次插入數據庫(末次獲得首次insertID)

本文介绍了一个使用Node.js和MySQL实现的事务处理流程。通过async-waterfall进行任务串行执行,确保了事务的一致性和原子性。包括开始事务、插入记录并获取自增ID、根据ID插入另一张表以及最终提交事务等步骤。

代碼:

var async = require('async');
const mysql = require ('mysql');
var mysqlconfig=require('./config/mysql_config/mysql_config').mysqlconfig;
var connection = mysql.createConnection(mysqlconfig);
 
var tasks = [function(callback) {
		connection.beginTransaction(function(err) {
			callback(err);
		});
	}, function(callback) {
		connection.query('INSERT INTO open_tb SET lock_id=?, open_result=?', [1234,'open4'], function(err, result) {
			console.log('result:',result);
			console.log('result.open_id:',result.insertId);
			callback(err, result.insertId); // 生成的ID会传给下一个任务
			//callback(err, result); // 生成的ID会传给下一个任务
		});
	}, function(insertId, callback) {
		// 接收到上一条任务生成的ID
		console.log('insertId:',insertId);
		connection.query('INSERT INTO lock_tb SET lock_id=?, user_id=?', [1234,insertId], function(err, result) {
			callback(err);
		});
	}, function(callback) {
		connection.commit(function(err) {
			callback(err);
	});
}];
 
async.waterfall(tasks, function(err, results) {
	if(err) {
		console.log(err);
		connection.rollback(); // 发生错误事务回滚
	}
	connection.end();
});

注意:

result 內容為:

 {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 419,
  serverStatus: 3,
  warningCount: 0,
  message: '',
  protocol41: true,

  changedRows: 0 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值