MysqlInnodb锁

MysqlInnodb锁

乐观锁

  • 具体流程
    • 读取数据
    • 对数据操作
    • 事务提交,校验数据读取后是否被修改
      • 时间戳判断:数据更新同时更新时间戳
      • 版本判断:数据更新升版
    • 校验无误写入,否则回滚
  • 特点:
    • 实际上没有使用数据库的锁
    • 适用于乐观的场景,及对数据竞争冲突较少的情况(读频繁)

悲观锁

  • 共享锁(S)

    • 大家都可以加锁,无论是否已经加了共享锁
    • 加了锁之后,谁也不能修改,直到所有锁被释放
  • 排他锁(X)

    • 增删改默认加
    • 加锁后其他线程不得对被加锁数据任何操作
  • 行锁

    • 锁定一行数据
    • 根据主键索引锁定该行
      • begin;
      • select XXX from XXX where XXX=XXX for update;
      • commit;
    • 若无索引,则锁定整表
  • 表锁

    • 锁定一张表
  • 特点

    • 适用于写频繁的场景

你可能感兴趣的:(数据库)