暂无图片
分享
suger
2023-07-14
MySQL 的锁有哪些

MySQL 的锁有哪些

收藏
分享
2条回答
默认
最新
Y
YanLang

MySQL 在 server 层 和 存储引擎层 都运用了大量的锁

MySQL server 层需要讲两种锁,第一种是MDL(metadata lock) 元数据锁,第二种则 Table Lock 表锁。

MDL 又名元数据锁,那么什么是元数据呢,任何描述数据库的内容就是元数据,比如我们的表结构、库结构等都是元数据。那为什么需要 MDL 呢?

主要解决两个问题:事务隔离问题;数据复制问题

InnoDB 有五种表级锁:IS(意向读锁);IX(意向写锁);S(读);X(写);AUTO-INC

在对表进行select/insert/delete/update语句时候不会加表级锁

IS和IX的作用是为了判断表中是否有已经被加锁的记录

自增主键的保障就是有 AUTO-INC 锁,是语句级别的:为表的某个列添加 AUTO_INCREMENT 属性,之后在插⼊记录时,可以不指定该列的值,系统会⾃动为它赋上单调递增的值。

InnoDB 4 种行级锁

RecordLock:记录锁

GapLock:间隙锁解决幻读;前一次查询不存在的东西在下一次查询出现了,其实就是事务A中的两次查询之间事务B执行插入操作被事务A感知了

Next-KeyLock:锁住某条记录又想阻止其它事务在改记录前面的间隙插入新纪录

InsertIntentionLock:插入意向锁;如果插入到同一行间隙中的多个事务未插入到间隙内的同一位置则无须等待

行锁和表锁的抉择

全表扫描用行级锁 

暂无图片 评论
暂无图片 有用 1
暂无图片
suger
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏