Javascript mysql js事务是否会打包所有指令,然后一次性提交
当我使用mysql js时,我有点困惑。我想找出代码背后的实际机制 正如我所知,如果我想做很多可以并行运行的mysql插入,那么打包所有插入指令并一次性提交给mysql会更有效 我的问题是,我正在使用Javascript mysql js事务是否会打包所有指令,然后一次性提交,javascript,mysql,node.js,Javascript,Mysql,Node.js,当我使用mysql js时,我有点困惑。我想找出代码背后的实际机制 正如我所知,如果我想做很多可以并行运行的mysql插入,那么打包所有插入指令并一次性提交给mysql会更有效 我的问题是,我正在使用promise mysql.js。我想使用事务来像这样包装整个指令 conn.beginTransaction() einvoiceList.map(e => { conn.query("do some insertion") }) conn.commit() 我使用这种方法正确吗
promise mysql.js
。我想使用事务来像这样包装整个指令
conn.beginTransaction()
einvoiceList.map(e => {
conn.query("do some insertion")
})
conn.commit()
我使用这种方法正确吗?我有一个例子,使用nodejs和mysql2 lib在一个事务中并行处理对数据库的多个查询: 基本上,这个想法是打开一个事务,然后执行所有db查询,最后提交或回滚更改 提示:尝试使用async/Wait,这会使工作更轻松:)
谢谢你的回答。我的问题是mysql2会将承诺转换为一个提交并发送到mysql服务器吗?是的,承诺数组只是为了跟踪所有查询何时完成到数据库,因为您只想在所有查询完成时提交!很抱歉,迟了回答!如果此答案有助于您,请标记为有用:)无需承诺。一个连接内的所有查询都是按顺序执行的(这是基本协议限制)。只需等待他们一个接一个
async myAsyncMethod(root) {
let promises = [];
let conn = null;
try {
conn = await this.database.getConnection();
await conn.query('START TRANSACTION');
//Execute multiple queries and save them inside an array to wait for the results later
for(...){
promises.push();
}
//Wait until all queries are done!
let results = await Promise.all(promises);
await conn.query('COMMIT');
await conn.release();
return results;
} catch (error) {
if (conn != null) {
await conn.query('ROLLBACK');
}
return 0;
}
}