NodeJS concurrential访问MySQL数据库

时间:2016-10-30 21:39:43

标签: mysql node.js concurrency semaphore

我面临着我的MySQL数据库和我在NodeJS中的RESTful API的问题

我有一个请求:

function plusOneToValue(id, callback) {
    MySQLDatabase.pool.getConnection(function(err, connection) {
        if (err) return callback(err)
        connection.query("SELECT id, value, property FROM values WHERE id = ?", 
            [id], function(err, entries) {
            if (err) {
                connection.release();
                return callback(err);
            }
            if (entries.length == 0) {
                connection.release();
                return callback("some error");
            }
            var entry = entries[0]
            if (entry.property = true)
                connection.query("UPDATE values SET value = ? WHERE id = ?", 
                    [entry.value + 1, entry.id], function(err, users) {
                    connection.release();
                    if (err) return callback(err);
                    return callback();
                });
            else {
                connection.release();
                return callback();
            }
        });
    });
}

我的问题是,当我同时调用此函数3次时,它会出现这种情况:

  • 选择
  • 选择
  • 选择
  • 更新
  • 更新
  • 更新

什么时候应该:

  • 选择
  • 更新
  • 选择
  • 更新
  • 选择
  • 更新

我试图用信号量修复它,但问题是我不希望它在每次通话时都阻止它!只有在对参数中传递了id的行进行复合访问时才会显示。

有谁知道我怎么能做到这一点?

0 个答案:

没有答案