LHon(学习笔记)——MySQL锁

MySQL锁的学习

关于MySQL事务隔离级别及传播行为可以看另一篇文章

最近工作中遇到了一些和MySQL有关的问题,看了很多博客,发现每一篇博客的观点都有所不同,越看越迷惑,所以还是决定自己参考书籍《MySQL技术内幕 InnoDB存储引擎》梳理一下关于MySQL锁的一些认识…

什么是锁

数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。为了保证一致性,必须有锁的介入。

lock 与 latch
  • 这两者都可以被称为锁,latch是一种轻量级的锁,其要求锁定的时间必须非常短,否则应用的性能会非常差,它存在的目的是为了保证并发线程操作临界资源的正确性,没有死锁检测机制。
  • lock的对象是事务,锁定的是数据库中的对象,如表、页、行,它有死锁机制,一般要求在事务commit或rollback后进行释放(不同的事务隔离级别有所不同)。
InnoDB存储引擎中的锁

InnoDB存储引擎实现了如下两种标准的行级锁:

  • 共享锁(S Lock):允许事务读一行数据;
  • 排他锁(X Lock):允许事务删除或更新一行数据。

如果一个事务T1获得了行r的共享锁,那么另外的事务T2可以立即获得行r的共享锁,但若有其他事务T3想要获取行r的排他锁,则其必须等待T1、T2释放行r上的共享锁,这个就是共享锁和排他锁的兼容性。

X S
X 不兼容 不兼容
S 不兼容 兼容

S和X锁都是行锁,兼容是指对同一记录(row)的兼容

InnoDB存储引擎还支持多粒度锁定,允许事务在行级上的锁和表级上的锁同时存在。为了支持在不同粒度上进行加锁操作,InnoDB支持一种额外的锁方式,称之为意向锁,其意向锁即为表级别的锁,其设计目的主要是为了在一个事务中揭示下一行将被请求的锁类型,支持以下两种意向锁:

  • 意向共享锁(IS Lock):事务想要获得一张表中某几行的共享锁;
  • 意向排他锁(IX Lock)࿱
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值