mysql update 更新失败的原因。

7 天前
 awanganddong

后台有一个批量操作的功能。

用户审核通过,然后给他的邀请人加优惠价。

伪代码
foreach(users as user){
    //通过审核(事务保证)
    
   // 给邀请人加优惠卷(事务保证)
}

现在出现的问题是用户加优惠价这个过程,对用户信息更新优惠卷总数失败。

给用户加优惠卷有 2 个插入操作,一个更新操作。

刚才进行批量操作,执行了 20 个用户,其中几个 update 操作失败。所以对这个问题没想明白,mysql rr 级别。

899 次点击
所在节点    PHP
6 条回复
evan1
7 天前
看看日志
loveyu
7 天前
假设不是 orm ,循环生成好 SQL ,然后一个 begin exec end 搞定。
如果是 orm ,插入后还要读取数据,用事务中的数据数据做一堆操作。先加个分布式锁,然后循环内部 开始事务 干活 提交
xiaofan2
7 天前
你校验了 update 的返回值吗?
awanganddong
7 天前
@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();
});
suifengba
7 天前
失败报错什么
awanganddong
7 天前
找到问题了,我在中途有个其他 update 操作,把用户余额还原了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1105356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX