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 锁(写锁) 互斥 互斥
相关推荐
uwvwko6 分钟前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
今天我又学废了8 分钟前
Spark,SparkSQL操作Mysql, 创建数据库和表
大数据·mysql·spark
扶尔魔ocy20 分钟前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝36 分钟前
项目复习(1)
java·数据库·八股·八股文·复习·项目、
w236173460138 分钟前
Django框架漏洞深度剖析:从漏洞原理到企业级防御实战指南——为什么你的Django项目总被黑客盯上?
数据库·django·sqlite
2302_809798321 小时前
【JavaWeb】MySQL
数据库·mysql
drowingcoder1 小时前
MySQL相关
数据库
Musennn2 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维3 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
逝水如流年轻往返染尘3 小时前
MySQL表的增删查改
mysql