mysql更新丢失

比如用户转账的操作。a 账户总共100,事务1和事务2查询账户都是100,然后事务1账户加50,提交,结果是50。事务2加50提交。这时候账户余额也为150,这会导致严重的问题。
解决办法1:使用悲观锁

1)读取锁定 --> select balance from account where user= ‘a’ for update

2)更新 --> update account set balance = balance -100 where user= ‘a’   
我不认同这种方法会解决更新丢失的问题

首先说明一点:for update 的确会阻止共享锁和排他锁,但是并不会阻止select,比如 select * from user,这种没有加任何锁的select,因为执行select 默认是不加任何锁的,所以会出现下面的流程:

事务A 执行select balance from account where user= ‘a’ for update
事务B执行select balance from account where user= ‘a’ ,事务A执行 update操作,提交事务,结果150,事务B执行update操作,结果也是150。所以,我的答案是悲观所并不会阻止更新丢失。即使是加了隔离级别的任意一种也不会阻止,唯一的解决办法是,每执行一条sql,就提交一次事务才能解决。

希望各位能说出自己的意见,我会一 一查看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值