Mysql 锁分析笔记

1.分类

1.1表锁

意向锁 IS ,IX

1.2 行锁

1.共享锁 S
2.排它锁 X

1.2.1细分

1.record锁
2.gap锁
3.next key 锁
相当于 record + gap
4.insert intention 锁
并非意向锁,而是一种特殊的gap锁。先持有的gap锁会block它
5.auto increament锁

2.锁流程

2.1插入

insert intention —> X record lock

2.2 更新

1.条件是唯一(主键或者unique key)
IX -> record lock (X)
2.条件非唯一
IX -> gpa lock (X)

3. 锁兼容矩阵

image.png
image.png

3.1 死锁分析

3.1.1 唯一键冲突导致的死锁

准备
表 user(id int,name varchar2(32)) unikey (name);
T 1: insert into user (id,name) values( 1,'sim')
T 2 : insert into user (id,name) values( 1,'sim')
T 3 : insert into user (id,name) values( 1,'sim')
T1 :rollback
当前锁状态
T1 持有 X 锁 T2 和T3会因为唯一建冲突退化成S
死锁分析
当X rollback 时,T2会抢X锁,当时发现 T3对记录加了S,所以会等T3释放S。
但是T3也是持有S,准备抢X。

3.1.2 select ...for update 和insert 导致的死锁

准备
表 user(id int,age int)
insert into values(1,10),(2,11),(3,13),(4,20)

T1 select * from user where age = 14 for update;
T2 select * from user where age = 15 for update;
T 1: insert into use values (5, 16);
T 2 : insert into use values (5, 16);

当前锁状态
T1 持有 gap 锁(13,20)
T 2持有gap锁(13,20)

死锁分析*
T1准备加 insert intention 锁,但是发现T2持有gap锁,等待T2释放gap锁。
同时T2也准备加 insert intention 锁,但是发现T1持有gap锁,等待T1释放gap锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 所在文集:数据库 本文的内容参考了: 架构师之路 - 挖坑,InnoDB的七种锁 架构师之路 - 插入InnoDB...
    专职跑龙套阅读 742评论 0 1
  • 1. 行锁 InnoDB存储引擎实现了如下两种标准的行级锁: ❑共享锁(S Lock),允许事务读一行数据。 ❑排...
    云师兄阅读 953评论 0 1
  • 备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL 事务 一.MySQL锁概述 数据库锁定...
    只是甲阅读 288评论 0 0
  • 当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异...
    初来的雨天阅读 3,615评论 0 22
  • 原文:https://my.oschina.net/lujianing/blog/887923[https://m...
    吃番茄的土拨鼠阅读 238评论 0 0