PHP执行多条sql语句插入或更新一条记录时如何避免脏数据?

发布于 2022-09-12 22:33:11 字数 193 浏览 30 评论 0

场景是:
表单里有两部分数据(A部分 B部分) 在mysql数据库表的一条记录里
我先insert一条记录到一张表里 这里是A部分post过来的表单数据
接着将B部分POST过来的数据 更新到刚才这条记录里
这两次操作中如果中间服务或数据库出错
如何避免只往数据库里写入了部分数据?
判断一下是否全了 再删除重新执行?这样貌似效率很低

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怀念你的温柔 2022-09-19 22:33:11

1.用事务啊,要么全执行,中间失败则全部回滚。

DB::beginTransaction();
try{
    //你的代码
    DB::commit();  //提交
}catch(\Throwable $exception){
    DB::rollBack();  //回滚
}

2.如果是新增的脏数据,比如快速点击注册,注册了两次,可以使用原子锁。
原子锁(依托于redis实现)的代码:

if (Cache::lock('foo', 10)->get()) {
    // 获取锁定10秒...

    Cache::lock('foo')->release();
}

注:用的laravel

森林很绿却致人迷途 2022-09-19 22:33:11

他的意思是两次请求 A表单和B表单都是同一条数据

根据业务可以先把A表单或者B表单数据存在session或者缓存里面
当A和B的表单数据都存在在进行写入操作然后再一次写入成功
清除缓存
这个方案要避免缓存被清理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文