connection.query(`START TRANSACTION;`, async function (err) {
if (err) {
req.flash("flash", "Something went wrong while deleting. Try again.");
return res.redirect("back");
} else {
await connection.query(
`INSERT INTO... ; SELECT LAST_INSERT_ID();`,
async (error, results1) => {
if (error) {
await connection.query(`ROLLBACK;`, function (err) {
req.flash("flash", "There was an error while posting.");
return res.redirect("/post");
});
} else {
var post_id = await results1[0].insertId;
await connection.query(
`INSERT INTO...`,
[],
async (error, results) => {
if (error) {
await connection.query(`ROLLBACK;`, function (err) {
req.flash("flash", "There was an error while posting.");
return res.redirect("/post");
});
} else {
await connection.query(
`INSERT INTO...`,
async (error, results) => {
if (error) {
await connection.query(`ROLLBACK;`, function (err) {
req.flash("flash", "There was an error while posting.");
return res.redirect("/post");
});
}
await connection.query(`ROLLBACK;`, function(err){
req.flash("flash", "Went through...");
return res.redirect("back");
})
...
});
首先我开始交易。然后我在中间有代码将数据插入到 3 个表中。我想测试回滚,它应该在 START TRANSACTION 之后撤消所有内容,但它没有执行任何操作。我做错了什么?
(代码本身可以工作,所以如果我放错了任何括号,请忽略)。
最佳答案
问题是我直接使用了一个池。您需要获得一个新连接,然后使用它来进行所有查询和事务。这也是 beginTransaction 之前对我不起作用的原因。我应该做的是:
connection.getConnection(function(err, con) {
con.query...
con.beginTransaction()...
con.query..
con.rollback()...
})
关于mysql - ROLLBACK 不会回滚事务 [NodeJS、MySQL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70525780/