2017-06-22 32 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 ;通話中可能會隱藏重要的內容。

在這兩種情況下,您都必須檢查所有步驟中的錯誤。當你最不期待他們時,僵局就會發生。