美文网首页
两个人同时到银行取钱问题

两个人同时到银行取钱问题

作者: 螃蟹和骆驼先生Yvan | 来源:发表于2020-05-20 17:23 被阅读0次

    两个人同时到银行取钱问题?


    延迟照成

    一个人现在余额180块钱,然后他用180块钱就买东西,同时又去充值500块钱,买东西的时候查询余额先查询出来了余额是180,这个时候充值冲进去了500,然后他买了东西,更新了余额,余额变成0;
    我以为这辈子差不多不会遇到了,真遇到了,说一下问题原因,我们知道数据库事务由严格的定义,它必须满足4个特性:
    原子性(Atomicity),一致性(consistency),隔离性(Isolation),持久性(Durability)。
    而我这里是因为没有满足原子性:也就是
    表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的任何操作都必须被撤销,让数据库返回初始状态。

    解决办法
    1.  update table set money = money+500,千万别这样写update table set money = 800
    2.可以校验数据时效性,主要用于金融行业:
    比如加个字段 lastupdatetime 每次更新都更新这个时间
    你update的时候加个条件,你query出来的时间必须等于数据库里这个字段的时间,
    否则不更新,提示数据已失效,这里必须保证数据查询时间不会太慢。否则时间肯定不一致
    

    相关文章

      网友评论

          本文标题:两个人同时到银行取钱问题

          本文链接:https://www.haomeiwen.com/subject/dlmnohtx.html