Igo*_*uan 10 javascript transactions node.js sequelize.js
我的数据库中有'Banks'表和'money'字段,
用户可以定期提款,但只有在银行存款> 0时才可以提款.
首先我应该获得银行的实体,然后检查是否(bank.money> amountToWithdraw)然后撤回这个金额.
想象一下这种情况,当并发用户试图提取一些钱时.在那一刻,当我检查(bank.money> amountToWithdraw)其他用户是否可以执行提款操作时,DB中的实际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});
})
})
Run Code Online (Sandbox Code Playgroud)
dri*_*hev 26
您可以在银行的行上使用锁定.
根据您的数据库,它看起来像这样.
models.sequelize.transaction(function (t) {
return models.Banks.findOne({where: {
money: {
$gt: 0
}
}, lock: t.LOCK.UPDATE, transaction: t }).then(function(bank){
bank.money -= amountToWithdraw;
return bank.save({transaction: t});
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10270 次 |
| 最近记录: |