更新时MySQL锁定行

时间:2019-02-21 02:38:35

标签: javascript mysql node.js

我想要达到的目标似乎很基本,但是我无法解决这个问题。

我在数据库中存储了这样构建的用户库存;

id, userid, item, status

id: identifier of row
userid: unique identifier of user
item: unique identifier of item
status: 0 or 1, where 0 means no longer in the inventory and 1 active

现在,当用户在我的网站上出售该商品时(例如,将其发送给垃圾邮件),结果是该商品被多次出售,因为该行尚未更新,并且连续的请求也得到了批准。

这是我的代码的简短可读示例;

function sell(uid, item){
  database.query('SELECT * FROM inventories WHERE user = ' + uid + ', item = ' + item).then((row) => {
    var item = row[0];

    //Check if the item is still in the user is inventory
    if(item.status !== 1){
      console.log('Found item is no longer in the user his inventory, item cannot be sold.');
      return;
    }

    //Remove the item form the inventory
    database.query('UPDATE inventories SET status = 0 WHERE item = ' + item);
  }).catch((err) => { console.log(err); })
}

我想这样做,以便在执行此代码时不再能将商品的行写入其中,这样就没人能卖出一件商品了,我认为这是很平常的事,尽管我不太确定如何获得此结果。

0 个答案:

没有答案