Mysql锁认识

1. 锁类别

Innodb引擎支持锁的,MyISAM是不支持的,这里将的mysql锁就是Innodb的锁。Innodb支持行级锁,也就是锁定范围能够到达某个数据表的某行,锁的粒度还是很大的。

锁粒度大的好处是,能提高并发的性能,并发一定是需要锁的,如果是表级锁,那么一个事务锁定表,其它事务将阻塞等待,这样大大降低性能,其实获得锁的那个事务可能只操作某一行,却锁住整个表。

  • 共享锁 : SLOCK
  • 排它锁:XLOCK

2. 行级锁实现算法

  • 记录锁: record lock 锁定某一条记录
  • 间隙锁: Gap Lock 锁定一个范围
  • 记录+间隙锁: Next-Key Lock

3. 为什么需要间隙锁

记录锁的性能其实不错了,那为什么需要间隙锁呢?

因为记录锁可能会出现幻读的情况,这个理解还是很容易的。
间隙锁锁住的不光是这一个记录,而是一个范围的数据,再满足范围类,是不允许其他事物进行数据处理的,这样在该事务操作期间,不会出现其他事物插入符合条件的数据,导致出现幻读的可能。

举个例子:[1,2,3,4]
事务1: 查询>2的数据
事务2: 插入5

使用记录锁,事务1锁住了记录2,这样事务2还是可以插入数据,这样事务1第二次查询的数据是3,4,5出现了幻读

使用间隙锁,锁住的是(2, 正无穷) ,这不一定是正无穷。 这样事务2在事务1执行期间内是不能插入的,这样就避免了幻读的可能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值