同时操作一张表,防止同时update

1. 一种锁是java提供的 synchronized, 同时只能有一个线程执行更新操作。比如:
 
public void updateUser(User user) {
     synchronized (user) {
         userMapper.updateByPrimaryKey(user);
     

}


2. 事务其实是另外一种锁的体现,是有隔离能力的。
 
3. 数据库本身是有锁机制的。比如更新锁,排他锁等,可以查看相关资料
 
4.在应用级别进行控制,比如在表中增加version字段。
 
更新的时候给版本号字段加上 1,然后 UPDATE 会返回一个更新结果的行数,通过这个行数去判断。
 
UPDATE 必须这样写:
 
UPDATE T_USER u
    SET u.address =  #address#,
        u.version = u.version + 1
  WHERE u.username =  #username#
    AND u.version =  #version#
 
如果更新执行返回的数量是 0 表示产生并发修改了,需要重新获得最新的数据后再进行更新操作。
 
Hibernate、JPA 等 ORM 框架或者实现,是使用版本号,再判断 UPDATE 后返回的数值,如果这个值小于 1 时则抛出乐观锁并发修改异常。



  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值