【发布时间】:2013-10-17 12:11:55
【问题描述】:
我在我的应用程序中使用node-mysql。我尝试实现SELECT FOR UPDATE,但我无法让它正常工作。我遇到的问题类似于下面的代码。下面for循环中的第一个事务没有成功阻塞第二个事务。相反,两个事务同时 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);
}
【问题讨论】:
-
您使用的是哪个存储引擎?
-
我问,因为我听说只有 InnoDB 支持一致性读取,我不知道这是否会有所作为。
-
我真的不明白为什么您需要在进行更新之前执行
SELECT FOR UPDATE?你打算在这两者之间做点什么吗? -
据我所知防止竞争状况
标签: mysql sql node.js node-mysql