登录
首页 >  数据库 >  MySQL

MYSQL使用锁解决并发下的更新丢失问题

来源:SegmentFault

时间:2023-02-23 20:44:41 439浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《MYSQL使用锁解决并发下的更新丢失问题》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下MySQL、数据库,希望所有认真读完的童鞋们,都有实质性的提高。

更新丢失是指并发下两次更新同时进行,后一次更新覆盖了前一次更新的情况,更新丢失是数据没有保证一致性导致的。
举个栗子:

  • 用户A在银行卡有100元钱,某一刻用户B向A转账50元(称为B操作),同时有用户C向A转账50元(称为C操作);
  • B操作从数据库中
    begin;
    select * from account where id = 1 for update;
    update account set balance=150 where id =1;
    commit;

    这样在B操作提交前,C操作无法获得排他锁,从而避免对account的重复更新导致的更新丢失。

    乐观锁

    乐观锁是指在获取数据时候不加锁,乐观的认为操作不会有冲突,在update的时候再去检查冲突。
    example:

    begin;
    select balance from account where id=1;
    -- 得到balance=100;然后计算balance=100+50=150
    update account set balance = 150 where id=1 and balance = 100;
    commit;

    如上,如果sql在执行的过程中发现update的affected为0 说明balance不等于100即该条数据有被其余事务更改过,此时业务上就可以返回失败或者重新select再计算

    好了,本文到此结束,带大家了解了《MYSQL使用锁解决并发下的更新丢失问题》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表