【发布时间】:2017-04-03 20:45:24
【问题描述】:
我的数据库中有 'Banks' 表和 'money' 字段,
用户可以定期取款,但只有在银行存款>0时才能取款。
首先我应该得到银行的实体,然后检查 if(bank.money > amountToWithdraw) 然后提取这个金额。
想象一下这种情况,当并发用户尝试提取一些钱时。 在我检查 if(bank.money > amountToWithdraw) 其他用户是否可以执行提款操作的那一刻,数据库中的真实 bank.money 金额会更少。
如何将交易应用于寻找银行操作(如何锁定银行实体)?
models.sequelize.transaction(function (t) {
return models.Banks.findOne({where: {
money: {
$gt: 0
}
}).then(function(bank){
//in this moment other user finished the same operation
// how to lock access for editing bank object by other users after //findOne method?
bank.money -= amountToWithdraw;
return bank.save({transaction: t});
})
})
【问题讨论】:
标签: javascript node.js transactions sequelize.js