java数据级别的悲观锁与乐观锁

最近在做web商城的购物车、订单和库存涉及到了事务及数据库锁的机制,刚刚看到数据库级别的锁机制,暂且先做个记录

业务场景:当用户下单时,需要减少库存。减少库存操作需要考虑,用户下单的并发,在没有锁及事务的情况下,可能会发生数据错误。

数据库版本 mysql

悲观锁:select from table where 条件 for update

锁表条件:**在事务开始执行查询sql后,事务提交之前,**对表记录上锁。在加锁状态,其他线程再执行 select from table where 条件 for update 为阻塞状态。
在事务开始后切提交前是个重点,切记!

乐观锁:对表数据加上version字段,更新记录前,检查version,若version相同,则更新记录并更新version。不同则回滚操作。

另:mysql 的InnoDB引擎 使用 for update 是根据查询索引来锁记录的,如果你的查询中的索引可以关联到多条,那么就会锁多条。
资料:

https://blog.csdn.net/G_Platinum/article/details/82931513

https://blog.csdn.net/feeltouch/article/details/78330797

https://blog.csdn.net/hq1148365306/article/details/60769604

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值