mysql并发更新丢失问题解决方案

本文通过一个SSM项目模拟并发更新丢失数据问题,详细介绍了如何使用悲观锁(意向共享锁、意向排它锁)和乐观锁来解决。悲观锁可能导致死锁,而乐观锁通过版本号机制有效防止并发更新丢失,建议在读提交(RC)隔离级别下使用。
摘要由CSDN通过智能技术生成

问题展示

搭建了一个简单springboot的ssm项目,通过idea提供的多线程debug模式模拟并发更新丢失数据问题。业务是根据name查询出来total,然后再根据name更新total+1

ssm项目主要代码

controller代码

@RestController
public class UserController {
   
    
    @Autowired
    private UserService service;
    
    @GetMapping("user/{id}")
    public String getUser(@PathVariable("id") int id){
   
        Map<String, Object> user = service.getUserById(id);
        System.out.println(user);
        return user.get("name").toString();
    }

    @GetMapping("test/concurrentUpdateLose")
    public String concurrentUpdateLose() {
   

        service.concurrentUpdateLose("zhangsan");
        return "ok";
    }
}

service代码

public interface UserService {
   
    Map getUserById(int id);

    int concurrentUpdateLose(String name );
}

service实现类代码

@Service
public class UserServiceImpl 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值