MySQL-锁篇

文章目录

锁是一种常见的并发事务的控制方式

表级锁和行级锁了解吗?有什么区别?

表级锁:MySQL中锁定粒度最大的一种锁(全局锁除外),针对非索引字段加的锁,不会出现死锁,不过,触发锁冲突的概率最高,高并发下效率极低

行级锁:MySQL中锁定粒度最小的一种锁,是针对索引字段加的锁,只针对当前操作记录的行加的锁

行级锁使用有什么注意事项?

行锁是针对索引字段加的锁,表级锁是针对非索引字段的锁,当我们执行update,delete语句时,如果where条件没有命中唯一索引或者索引失效的话,就会导致扫描全表对表中所有行记录进行加锁

InnoDB有哪几类行锁?

  1. 记录锁:锁定单个行记录的锁
  2. 间隙锁:锁定索引记录间隙(不含该记录)
  3. 临键锁:记录锁+间隙锁,同时锁住数据,并锁住间隙

共享锁和排他锁是什么?

不论表级锁和行级锁,都存在共享锁(S锁)和排他锁(X锁)两类
共享锁 :读锁,事务在读取 记录时获取共享锁,允许多个事务同时获取
排他锁 :写锁/独占锁,事务在修改 记录时获取排他锁,不允许多个事务同时获取

排他锁与其他任何锁都不兼容,共享锁只与共享锁兼容

S 锁 X 锁
S 锁 不冲突 冲突
X 锁 冲突 冲突

意向锁有什么用?

用到表锁时,快速判断一个表是否有行锁

意向锁是表级锁,分为两类:

  • 意向共享锁(IS锁):事务有意向对表中某些记录添加共享锁(S锁),加共享锁之前必须先获取该表的IS锁
  • 意向排他锁(IX锁):事务有意向对表中某些记录添加排他锁(X锁),加排它锁之前必须先获取该表的IX锁

意向锁之间是相互兼容的

IS 锁 IX 锁
IS 锁 兼容 兼容
IX 锁 兼容 兼容

意向锁和共享锁和排他锁互斥兼容情况

IS 锁 IX 锁
S 锁(读锁) 兼容 互斥
X 锁(写锁) 互斥 互斥
相关推荐
struggle20253 小时前
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
数据库·typescript·neo4j
伤不起bb4 小时前
Redis 哨兵模式
数据库·redis·缓存
卑微的Coder4 小时前
Redis Set集合命令、内部编码及应用场景(详细)
java·数据库·redis
2501_915373884 小时前
Redis线程安全深度解析:单线程模型的并发智慧
数据库·redis·安全
呼拉拉呼拉4 小时前
Redis知识体系
数据库·redis·缓存·知识体系
霖檬ing4 小时前
Redis——主从&哨兵配置
数据库·redis·缓存
卜及中7 小时前
【Redis/2】核心特性、应用场景与安装配置
数据库·redis·缓存
LucianaiB7 小时前
如何做好一份优秀的技术文档:专业指南与最佳实践
android·java·数据库
Eiceblue8 小时前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
在未来等你10 小时前
SQL进阶之旅 Day 21:临时表与内存表应用
sql·mysql·postgresql·database·temporary-table·memory-table·sql-optimization