• MySQL锁


    锁的种类

    • 共享锁
      简称S锁,例如:在事物要读取一条记录时,需要先获取该记录的S锁。
    select ... lock in share mode;
    ##给t表添加读锁
    LOCK TABLES t READ;
    
    • 1
    • 2
    • 3
    • 独占锁
      也称排它锁,简称X锁。例如:在事物要改动一条记录(删除和修改)时,需要先获取该记录的X锁。
    select ... for update;
    ##给t表添加写锁
    LOCK TABLES t WRITE;
    
    • 1
    • 2
    • 3
    • 意向共享锁
      简称IS锁,当事务准备在记录上加S锁式,需要现在表级别加一个IS锁。意义:快速判断(不用循环遍历)表中是否有记录添加S和X锁,
    • 意向独占锁
      简称IX锁,当事务准备在记录上加X锁式,需要现在表级别加一个IS锁。
    • AUTO-INC
      用于表中某列使用自增字段,再插入语句是就添加一个表级别的AUTO-INC锁。
    • AUTO_INCREMENT
      用于自增字段列获取自增数据。
    • GAP Lock
      间隙锁:也称“gap 锁”,用于防止插入幻影记录。 在事务期间读取(1-10)的记录中加锁(哪怕中间缺失4-5的记录),防止其他事务添加数据(添加了4-5的数据)。
    SELECT * FROM t WHERE c1 BETWEEN 1 and 10 FOR UPDATE;
    
    • 1
    • Next-Key Lock
      gap锁的范围基础上添加了该条数据的范围

    • Insert Intention Lock
      一个事务在插入一条记录时需要判断插入位置是否已被背的事务加了gap锁。

    • 隐式锁
      MySQL自身在对插入或者修改的数据(没有显示的添加s、x锁)时进行加锁,防止其他事务进行脏读等。实现方式:判断当前记录的trx_id的值是否处于活跃事务阶段。

    锁的兼容性

    锁类型共享锁 S排他锁 X意向共享锁 IS意向排他锁 IX
    共享锁 S兼容冲突兼容冲突
    排他锁 X 冲突冲突冲突冲突
    意向共享锁 IS兼容冲突兼容兼容
    意向排他锁 IX冲突冲突兼容兼容
  • 相关阅读:
    11---OpenCV:图像进阶操作之①轮廓②凸包操作
    CSDN21天学习挑战赛之顺序查找
    c/c++ 线程私有数据
    React 模态框的设计(七)整合与测试
    详解Autosar Arxml中的CANFD报文及格式
    VS2022和QT5.14.2的安装调试
    java并发编程 CopyOnWriteArrayList详解
    做好接口测试
    Java中的类和对象 (二)
    Java 中 for 和 foreach 哪个性能高?
  • 原文地址:https://blog.csdn.net/qq_27502511/article/details/131092421