问答

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

作者:admin 2021-04-22 我要评论

场景是: 表单里有两部分数据(A部分 B部分) 在mysql数据库表的一条记录里 我先insert一条记录到一张表里 这里是A部分post过来的表单数据 接着将B部分POST过来...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

###

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

###

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP执行多条sql语句插入或更新一条记录

    PHP执行多条sql语句插入或更新一条记录

  • java怎么用正则表达式提取出html代码中

    java怎么用正则表达式提取出html代码中

  • vue打包npm run build打包图片发生erro

    vue打包npm run build打包图片发生erro

  • linux 脚本 一个

    linux 脚本 一个

腾讯云代理商
海外云服务器