大数据WEB阶段(二十)更新丢失

来源:互联网 发布:电子音乐相册制作软件 编辑:程序博客网 时间:2024/05/22 15:27

更新丢失

一、更新丢失概述

  1. 两个并发的事务 , 基于同一个查询进行更新操作 ,后提交的事务忽略了先提交的事务对数据库的影响 , 结果造成了数据库操作失误的问题, 称之为更新丢失。

二、实例

  1. 重复充值
  2. 秒杀抢购
  3. 商品删除

三、解决方案

  1. 将数据库隔离级别提升为serializable级别防止更新丢失的问题
    1. 效率极低 , 不推荐使用
  2. 悲观锁
    1. 悲观的认为每次查询都会造成更新丢失问题 , 所以在查询时 , 手动添加排它锁 , 排斥后续其他事务的更新操作 。
    2. 在查询时关键查询语句后加 for update; 。
  3. 乐观锁
    1. 乐观的认为每次查询都不会有更新丢失问题 , 在修改时 , 人为地检测更新丢失的发生 。
    2. 在更新 操作时带上查询结果 , 把查询结果作为条件之一 , 如果影响行数为0 , 则发生更新丢失 , 此时需要回滚事务重新执行(是否需要重新执行看具体的场景)。
  4. 悲观锁和乐观锁都不是数据库中真正存在的锁 , 而是两种解决方案的思想
  5. 如果更新多而查询少, 使用悲观锁
  6. 如果更新少而查询多, 使用乐观锁
原创粉丝点击