数据库锁

共享锁,排他锁,意向共享锁,意向排他锁

image.png

innoDB行锁的实现方式:

InnoDB行锁是通过给索引上的索引项加锁类实现的.如果没有索引,那么InnoDB将通过隐藏的聚簇索引来对记录加锁.
InnoDB行锁分为3项:

  • Record Lock: 单个行记录上的锁
  • Gap Lock :间隙锁,锁定一个范围,但不包含本身
  • Next-Key Lock : Gap Lock+ Recork Lock,锁定一个范围,并且锁定记录本身.

InnoDB这种行锁实现特点以为着:如果不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,实际效果与表锁无异.

1)不通过索引条件查询时,InnoDB会锁定表中所有记录.通过索引只会锁定复合条件的记录(查询用 for update 加排他锁)


image.png

image.png

2)如果使用了相同的索引键,即使是访问不同的行业会发生锁冲突


image.png

3)当表中有多个索引,不同事物可以使用不同的索引锁定不同的行,不论是主键索引,唯一索引,还是普通索引,都会锁定的是行级锁.但是如果存在相同的记录,则会发生锁冲突.


image.png

4)即便是使用了索引字段,但是是否真的使用索引是有MySQL通过执行计划决定的,索引也有可能进行的全表扫描,那么也是相对于锁整个表.


间隙锁:
当我们用范围条件而不是相等条件检索数据时,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做间隙锁.


image.png

image.png

死锁:


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容