node-mysql でトランザクションを実行したい (クエリ START TRANSACTION、ROLLBACK、COMMIT を実行して)。私はこのコードを持っています:
conn.query("START TRANSACTION");
conn.query("INSERT INTO users (id, name, age) VALUES (1, 'Mat', '24')", function(e){
if (e){
conn.query("ROLLBACK", callback);
}
else{
conn.query("COMMIT", callback);
}
});
conn.query("INSERT INTO users (name, age) VALUES ('Mat', '24')", function(e, r){
console.log(e); // null
console.log(r); // {fieldCount: 0, affectedRows: 1, insertId: 2, serverStatus: 3, warningCount: 0, message: ''}
});
ロールバック ケースをテストするために、意図的に id を 1 に設定しました。これにより、インデックスの重複エラーが発生します。トランザクションはロールバックされますが、問題は、トランザクションの外部にある 2 番目の挿入が実行されないことです。エラーはログに記録されません。奇妙なことに、2 回目の挿入の直後にテーブル全体を選択すると、結果に新しい行が表示されます。しかし、別の接続では、それは消えます。そのため、接続の最後に新しく作成された行が削除されたように見えます。トランザクションがコミットされている場合、問題は発生しません。