MySQL锁

锁的种类

  • 共享锁
    简称S锁,例如:在事物要读取一条记录时,需要先获取该记录的S锁。
select ... lock in share mode;
##给t表添加读锁
LOCK TABLES t READ;
  • 独占锁
    也称排它锁,简称X锁。例如:在事物要改动一条记录(删除和修改)时,需要先获取该记录的X锁。
select ... for update;
##给t表添加写锁
LOCK TABLES t WRITE;
  • 意向共享锁
    简称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;
  • Next-Key Lock
    在gap锁的范围基础上添加了该条数据的范围

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

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

锁的兼容性

锁类型共享锁 S排他锁 X意向共享锁 IS意向排他锁 IX
共享锁 S兼容冲突兼容冲突
排他锁 X 冲突冲突冲突冲突
意向共享锁 IS兼容冲突兼容兼容
意向排他锁 IX冲突冲突兼容兼容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值