CNode

为何node-mysql 事务处理没有起效。见代码。

问答
Mmrlong发布于11 年前最后回复11 年前7 回复4637 浏览0 收藏
pool.getConnection(function(err,conn){
  if(!err){
    
    conn.beginTransaction(function(err){
      
      var billdata = {
        webi_guid:db.newGuid(),
        weor_code:'test111',
        webi_paywecode:'1111',
        webi_totalfee:100
      };
      
      conn.query('insert into we_bill set ?',billdata,function(err,rows){
        
        console.log('sss'+err);  
        conn.rollback(function(err){console.log(err)});
        //conn.commit();
        conn.release();
        return;
      
      });  
    });  
  }
  else{
    console.log('err'); 
  };
});

查看回复

回复 (7)

M
mrlong#1·11 年前
引用 klesh@mrlong 目测可能是 rollback 未完成前 connection 已经 release。它们在同一级别。 试下把 release 放在 rollback 的回调内。

@klesh 按你的方法执行还是一样。有问题。

conn.rollback(function(err){ console.log(err); conn.release();
});

M
mrlong#2·11 年前

我已 rollback 为何库内还有记录写入。

S
songqinghehe#3·11 年前

难道不是在失败的情况才roolback?

S
songqinghehe#4·11 年前

建议去看下官方文档,用法不是这么用的

M
mrlong#5·11 年前
引用 songqinghehe建议去看下官方文档,用法不是这么用的

@songqinghehe 为何失败才调用用 rollback, 我只做测试一下。 官方的文档我看了。如是我查不出来,只能说水平有问题。请指教我的代码有问题吗。

K
klesh#6·11 年前
引用 mrlong@songqinghehe 为何失败才调用用 rollback, 我只做测试一下。 官方的文档我看了。如是我查不出来,只能说水平有问题。请指教我的代码有问题吗。

@mrlong 目测可能是 rollback 未完成前 connection 已经 release。它们在同一级别。 试下把 release 放在 rollback 的回调内。

M
mrlong#7·11 年前

问题解决了,没设置innoDB。。。

alter table we_bill engine=innodb;

参与回复
登录后即可参与回复。登录