abc`1 2022-04-10 19:37 采纳率: 73.7%
浏览 22
已结题

同时修改同一条记录的问题

如果用户提交了一个任务,就会在数据库产生一条记录,此时该记录的状态字段是待执行。
后台会定时去处理这个任务,该任务分为好多个阶段,进入每个阶段都会更新对应记录的状态字段。
且用户还可以主动发起“暂停”、“取消”等操作,对记录的影响就是状态字段的更新。
现在问题是,如果后台正在更新状态字段,用户主动发起了“取消”操作,就可能出现两个地方同时更新一条记录的现象,这种问题一般怎么解决,都是使用版本号来解决吗?

  • 写回答

2条回答 默认 最新

  • 莫离瑜 2022-04-11 10:55
    关注

    可以考虑从三个方面解决该问题
    1.如同楼上所说,代码中的更新状态操作加上同步锁,但是不建议,数据量大的时候会严重影响效率
    2.如果数据库选用的mysql,存储引擎选用的默认的innodb,那么可以在代码中设置mysql数据库事务隔离级别,保证事务提交后才能其他事务才能修改
    3.可以在该状态字段添加索引,因为mysql对于有索引的数据记录默认添加行锁,对于同一条记录,当一个update未执行完成的时候,其他的update和delete语句会进入阻塞状态,只有当前的update提交之后才会允许其他语句修改。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月10日

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。