打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
别废话,各种SQL到底加了什么锁?
黄爸爸好
>《数据库》
2022.01.19
关注
有朋友留言,问能不能花2分钟讲讲,MySQL的各类SQL语句,究竟加了什么锁?
额,MySQL加的锁,和
事务隔离级别
相关,又和
索引
相关,尝试花2分钟讲讲看。
画外音:这2分钟需要的辅助知识,都已经附带了链接,贴心吧!
第一类,普通select加什么锁?
(1)在读未提交
(
Read Uncommitted
)
,读提交
(Read Committed, RC)
,可重复读
(Repeated Read, RR)
这三种事务隔离级别下,普通select使用
快照读
(snpashot read)
,
不加锁
,并发非常高;
(2)在串行化
(Serializable)
这种事务的隔离级别下,普通select会升级为
select ... in share mode;
【快照读】
辅助阅读:
《
InnoDB,并发如此之高的原因
》
【事务隔离级别】
辅助阅读:
《
InnoDB,巧妙的实现四种事务的隔离级别
》
第二类,加锁select加什么锁?
加锁select主要是指:
-
select ... for update
-
select ... in share mode
(1)如果,
在唯一索引
(unique index)
上使用唯一的查询条件
(unique search condition)
,会使用
记录锁
(record lock)
,而不会封锁记录之间的间隔,即不会使用间隙锁
(gap lock)
与临键锁
(next-key lock)
;
【记录锁,间隙锁,临键锁】
辅助阅读:
《
InnoDB里的七种锁
》
举个栗子,假设有InnoDB表:
t(id PK, name);
表中有三条记录:
1, shenjian
2, zhangsan
3, lisi
SQL语句:
select * from t where id=1 for update;
只会封锁记录,而不会封锁区间。
(2)
其他的查询条件和索引条件
,InnoDB会封锁被扫描的索引范围,并使用
间隙锁
与
临键锁
,避免索引范围区间插入记录;
第三类,
update与delete加什么锁?
(1)和加锁select类似,如果
在唯一索引上使用唯一的查询条件来update/delete
,例如:
update t set name=xxx where id=1;
也只加
记录锁
;
(2)
否则,
符合查询条件
的索引记录之前
,都会加
排他临键锁
(exclusive next-key lock)
,来封锁索引记录与之前的区间;
(3)尤其需要特殊说明的是,如果update的是聚集索引
(clustered index)
记录,则对应的普通索引
(secondary index)
记录也会被隐式加锁,这是由InnoDB索引的实现机制决定的:
普通索引存储PK的值
,检索普通索引本质上要二次扫描聚集索引。
【索引底层实现】
辅助阅读:
《
索引,底层是如何实现的?
》
【聚集索引与普通索引的实现差异】
辅助阅读:
《
InnoDB,聚集索引与普通索引有什么不同?
》
第四类,
insert加什么锁?
同样是写操作,insert和update与delete不同,它会用
排它锁
封锁被插入的索引记录,而不会封锁记录之前的范围。
同时,会在插入区间加
插入意向锁
(insert intention lock)
,但这个并不会真正封锁区间,也不会阻止相同区间的不同KEY插入。
【插入意向锁】
辅助阅读:
《
InnoDB里的七种锁
》
了解不同SQL语句的加锁,对于分析多个事务之间的并发与互斥,以及事务死锁,非常有帮助。
画外音:文章的参考资料为MySQL官网,以及楼主对MySQL的理解,版本基于5.6,欢迎探讨。
希望这2分钟,大家有收获。
架构师之路
-分享
可落地
的架构文章
辅助阅读
:
《
InnoDB,并发如此之高的原因
》
《
InnoDB,巧妙的实现四种事务的隔离级别
》
《
InnoDB里的七种锁
》
《
索引,底层是如何实现的?
》
《
InnoDB,聚集索引与普通索引有什么不同?
》
谢
转
。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
并发控制 mysql InnoDB表锁
万字总结 MySQL核心知识,赠送25连环炮
[总结]数据库管理(事务、ACID、并发、封锁、可串行化、隔离、……)
MySQL(一):MySQL数据库事务与锁
【眼见为实】数据库并发问题 封锁协议 隔离级别
线上故障如何快速排查?来看这套技巧大全
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×