节点-如果一个查询失败,则Mysql事务不会回滚

卡尔佩什·帕特尔

我正在尝试执行总共有三个查询的node-mysql事务。这三个都是“ INSERT”查询。我故意将第三个查询写错以测试回滚,但是对于前两个查询,事务正在成功进入数据库。

我知道类似的问题已经被问过几次了,我几乎尝试了所有问题,但是没有运气

exports.registerNewUserTransaction = async (
  res,
  userToBeAdded,
  nameToBeAdded,
  emailToBeAdded)  => {
  const conn = await db.getConnection();
  await conn.beginTransaction();
  try {
    await this.insertOne('user', userToBeAdded);
    await this.insertOne('name', nameToBeAdded);
    await this.insertOne('email', emailToBeAdded);
    await conn.commit();
    res.status(200);
  } catch(err) {
    await conn.rollback();
    res.status(400);
  } finally {
    await conn.release();
  }
};

如您所见,我正在从Pool获取连接对象,开始事务并一个接一个地执行查询。我的第三个查询的列名错误,因此事务应回滚,但我看到前两个查询的条目。我非常感谢正确的方向。节点版本:12.8.0 mysql(在docker中运行):8.0.15 mysql(npm版本):2.17.1

卡尔佩什·帕特尔

经过很多努力,终于弄明白了。答案是:

exports.registerNewUserTransaction = async (
  res,
  userToBeAdded,
  nameToBeAdded,
  emailToBeAdded)  => {
  const conn = await db.getConnection();
  // My first mistake was not to promisify connection query 
  conn.query = util.promisify(conn.query);
  await conn.beginTransaction();
  try {
    // My second mistake was not to use same connection
    await conn.query('INSERT INTO ...', userToBeAdded);
    await conn.query('INSERT INTO ...', nameToBeAdded);
    await conn.query('INSERT INTO ...', emailToBeAdded);
    await conn.commit();
    return res.status(200);
  } catch(err) {
    await conn.rollback();
    return res.status(400);
  } finally {
    await conn.release();
  }
};

希望这可以对某人有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

节点-MSSQL查询事务

Spring Integration-如果第一个事务失败,则回滚第二个事务

如果一个事务在多个事务到不同的表之间失败,则在休眠中是否可以回滚?

Xpath 必需:根据第一个节点的子节点获取兄弟节点的子节点

从另一个xpath查询节点查询xpath

节点Lambda:MySQL查询永远不会运行

多个查询的节点MySql回调

如果多个存在,则xpath仅获得一个节点

Elasticsearch多节点集群一个节点始终因docker compose失败

将一组节点合并到一个节点上(仅在查询中)

根据前一个节点中的键值复制节点

节点池与一个池中的节点数

合并一个节点的子节点的所有值

Docker多节点与集群中的一个节点

SpriteKit:另一个节点之上的节点

给定节点的绑定对象,选择一个Treeview节点

如何删除节点数组的最后一个节点?

将多个节点关联到一个节点的密码

ARKit:在节点后面放置一个节点

在现有节点之间插入一个节点

查找内部节点、叶节点和根节点的 SQL 查询

如果其他节点匹配,则来自另一个文件的PowerShell XML节点值

如果双向链表为奇数,则删除中间节点和最后一个节点

XSL 删除空子节点但如果没有子节点创建一个

xpath获取第一个节点查询

Cypher:在一个查询中创建节点和关系

Xpath:查找节点旁边的节点(如果存在)

如何只查询与某些节点相关的节点

基于另一个节点属性的XPath查询节点