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 锁(写锁) 互斥 互斥
相关推荐
-madongyu-3 分钟前
GaussDB 部署规划:磁盘水位、RAID 与端口设计
数据库·gaussdb
weixin_511255217 小时前
MySQL升级记录
数据库·mysql
程序猿乐锅8 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
Leo.yuan8 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
做运维的阿瑞8 小时前
数据库增删改的安全写法
数据库·sql·mysql
程序边界9 小时前
迁移评估不再拍脑袋,这个数据迁移工具的量化报告把我救了(上)
数据库
阿狗童鞋9 小时前
Redis实战指南
数据库·redis·缓存
frjc10 小时前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch
lupai10 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
小马哥程序开发10 小时前
[点赞收藏免费领取 · 项目源码]37399民族服饰饰品商城小程序
sql·mysql·flask·源码·课程设计·程序开发·课设