
后台有一个批量操作的功能。
用户审核通过,然后给他的邀请人加优惠价。
伪代码 foreach(users as user){ //通过审核(事务保证) // 给邀请人加优惠卷(事务保证) } 现在出现的问题是用户加优惠价这个过程,对用户信息更新优惠卷总数失败。
给用户加优惠卷有 2 个插入操作,一个更新操作。
刚才进行批量操作,执行了 20 个用户,其中几个 update 操作失败。所以对这个问题没想明白,mysql r 级别。
1 evan1 PRO 看看日志 |
2 loveyu 334 天前 via Android 假设不是 orm ,循环生成好 SQL ,然后一个 begin exec end 搞定。 如果是 orm ,插入后还要读取数据,用事务中的数据数据做一堆操作。先加个分布式锁,然后循环内部 开始事务 干活 提交 |
3 xiaofan2 334 天前 你校验了 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 334 天前 失败报错什么 |
6 awanganddong OP 找到问题了,我在中途有个其他 update 操作,把用户余额还原了。 |