アプリケーションでnode-mysqlを使用しています。SELECT FOR UPDATEを実装しようとしましたが、正しく動作させることができませんでした。私が抱えている問題は、以下のコードのように見えます。以下の for ループの最初のトランザクションは、2 番目のトランザクションを正常にブロックしません。代わりに、両方のトランザクションが同時に SELECT FOR UPDATE を実行し、同じレコードを取得します。どうすればこれを修正できますか? ありがとう!
var testTransaction = function (count) {
connection.beginTransaction(function(err) {
if (err) throw err;
db.query('SELECT * FROM myTable WHERE id = 1 FOR UPDATE', function(err, rows, result) {
if (err) {
connection.rollback(function() {
throw err;
});
}
connection.query('UPDATE myTable SET myField=? WHERE id=1', (count + 1), function(err, result) {
if (err) {
db.rollback(function() {
throw err;
});
}
connection.commit(function(err) {
if (err) {
db.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
});
});
}
for (var i = 0; i < 2; i++) {
testTransaction(i);
}