后台有一个批量操作的功能。
用户审核通过,然后给他的邀请人加优惠价。
伪代码
foreach(users as user){
//通过审核(事务保证)
// 给邀请人加优惠卷(事务保证)
}
现在出现的问题是用户加优惠价这个过程,对用户信息更新优惠卷总数失败。
给用户加优惠卷有 2 个插入操作,一个更新操作。
刚才进行批量操作,执行了 20 个用户,其中几个 update 操作失败。所以对这个问题没想明白,mysql rr 级别。
1
evan1 2 天前 via iPhone
看看日志
|
2
loveyu 2 天前 via Android
假设不是 orm ,循环生成好 SQL ,然后一个 begin exec end 搞定。
如果是 orm ,插入后还要读取数据,用事务中的数据数据做一堆操作。先加个分布式锁,然后循环内部 开始事务 干活 提交 |
3
xiaofan2 2 天前
你校验了 update 的返回值吗?
|
4
awanganddong OP @xiaofan2 没有校验 update 返回值。做的类似这样的操作
Db::transaction(function () { //用户账号 $money = 10000; $accountModel = new Account(); $accountModel->where('uid', 0) ->update([ 'dream_fund' => $money, ]); $billData = [ 'uid' => 0, 'money' => 0, 'itime' => time(), 'utime' => time(), ]; $this->model->data($billData); $this->model->save(); }); |
5
suifengba 2 天前
失败报错什么
|
6
awanganddong OP 找到问题了,我在中途有个其他 update 操作,把用户余额还原了。
|