mysql - ROLLBACK 不会回滚事务 [NodeJS、MySQL]

标签 mysql node.js node-mysql

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/

相关文章:

mysql - 带条件的 SQL 多语句

node.js - Node -orm-事务 : is it possible to perform transactions in one mysql connection for all clients?

mysql - 是否有用于 C 的标准 mysql 连接池库?

mysql - 如何匹配逗号分隔的字符串,而不考虑它们在 Mysql 中的位置顺序

node.js - JointJS 依赖管理问题

node.js - 如何使用修改后的 npm 包部署 node.js 程序?

mysql - 使用mysql node.js批量插入时出现Sql语法错误

mysql - sql:将主键更改为另一个唯一元素列表

php - SQL 插入问题

node.js - 使用 Sequelize 构建、播种和销毁 PostgreSQL 以进行测试