2017-06-22 31 views
0

有没有更好的方式来使用与mariasql库的交易,而不是将BEGIN添加到查询的开始,并使用提交或回滚进行最终确定?与mariadb和node.js使用交易

目前,如果我想换一系列查询在交易我必须做这样的事情:

const MariaClient = require('mariasql'); 
let client = new MariaClient(); 

client.connect({ 
    host: "127.0.0.1", 
    user: "user", 
    password: "pass", 
    db: "some_db", 
    multiStatements: true 
}); 

client.query('BEGIN; INSERT INTO some_table VALUES ("a0","b0"), ("a1","b1"), ("a2","b2");', function (err) { 
    if (err) { 
     client.query('ROLLBACK;'); 
    } 
    client.query('COMMIT;'); 
}); 

这似乎笨重,可能容易出错。我们使用generic-pool来管理mariadb客户端,因此看起来可能会有一些意想不到的结果以这种方式处理交易。

+0

'client.beginTransaction'不存在?如果不是,请改用mysql库 –

回答

1

计划A:如果autocommit设置为1,那么每个语句都是它自己的事务。没有BEGIN/COMMIT需要。

B计划:吮吸它和使用单独对API的调用这里每个语句:

BEGIN; 
some SQL statement; 
some SQL statement; 
some SQL statement; 
COMMIT; 

如果原料药有BEGINCOMMIT的特别要求,用它们来代替执行相应的SQL ;通话中可能会隐藏重要的内容。

在这两种情况下,您都必须检查所有步骤中的错误。当你最不期待他们时,僵局就会发生。