我正在为我所工作的公司编写应用程序服务器...
我们正在另一个用Java编写的服务器应用程序中使用conn.setAutoCommit(false);
,
我正在寻找在nodejs中做到这一点。
在Java应用程序中,我们像这样使用它:
conn.setAutoCommit(false);
// SQL INSERT #1
// SQL INSERT #2
// SQL UPDATE #1
// SQL INSERT #3
// SQL INSERT #4
// SQL UPDATE #2
conn.commit();
conn.setAutoCommit(true);
在nodejs中,如果我要做同样的事情吗? 我想到了这样的东西,但我不知道它是否会以相同的方式工作(我们正在使用SQL Server);
knex.raw(`SET IMPLICIT_TRANSACTIONS OFF`);
// SQL INSERT #1
// SQL INSERT #2
// SQL UPDATE #1
// SQL INSERT #3
// SQL INSERT #4
// SQL UPDATE #2
knex.raw(`COMMIT TRANSACTION`);
knex.raw(`SET IMPLICIT_TRANSACTIONS ON`);
我会将其打包到某个函数中,如果出现错误,该函数将调用回滚...会大致相同吗?
答案 0 :(得分:0)
您为什么要那样做?
您实际上可以启动真正的事务,在该事务中发送所有插入查询并最后提交该真正的事务,而不是总是为IMPLICIT_TRANSACTIONS OFF
设置应同时提交的查询顺序。
await knex.transaction(async (trx) => {
await trx('table').insert(...);
await trx('table').update(...);
await trx('table').insert(...);
// when function returns implicit promise all the
// inserts and updates will be committed
// if an exception is thrown and promise returned
// by this async function rejects, then transaction will be rolled back
});