Mysql 在Nodejs中执行不同的批插入到一个事务中
我需要为两个不同的集合执行两个不同的插入,一个依赖于另一个,因此我需要执行第一个插入,然后能够执行第二个插入。我的问题是,如果发生错误,我需要能够回滚所有操作,因此如果发生错误,我需要回滚两个插入 我试图在事务内部用我的两个批处理调用来做类似的事情,但它不起作用Mysql 在Nodejs中执行不同的批插入到一个事务中,mysql,node.js,mariadb,Mysql,Node.js,Mariadb,我需要为两个不同的集合执行两个不同的插入,一个依赖于另一个,因此我需要执行第一个插入,然后能够执行第二个插入。我的问题是,如果发生错误,我需要能够回滚所有操作,因此如果发生错误,我需要回滚两个插入 我试图在事务内部用我的两个批处理调用来做类似的事情,但它不起作用 conn.beginTransaction() .then(() => { conn.query("INSERT INTO testTransaction values ('test')");
conn.beginTransaction()
.then(() => {
conn.query("INSERT INTO testTransaction values ('test')");
return conn.query("INSERT INTO testTransaction values ('test2')");
//instead of this two query I have my batch inserts
})
.then(() => {
conn.commit();
})
.catch((err) => {
conn.rollback();
})
有没有关于如何做到这一点的例子?如果有人有同样的情况,并且知道我如何解决这个问题,下面是一个有效的代码:
return connectionMaria.beginTransaction()
.then(() => {
return conn.batch(insert1, values1)
.then(() => {
return conn.batch(insert2, values2)
})
.then(() => {
connectionMaria.commit();
})
.catch((error) => {
connectionMaria.rollback();
throw error;
});
如果你有很多承诺需要等待,你可以使用:
我需要等到insert1完成后才能执行insert2,这就是为什么Promise.All()方法对我不起作用。但是谢谢
conn.beginTransaction()
.then(() => {
return Promise.all([
conn.query("INSERT INTO testTransaction values ('test')"),
conn.query("INSERT INTO testTransaction values ('test2')")
])
})
.then(() => {
conn.commit();
})
.catch((err) => {
conn.rollback();
})