千家信息网

MySQL中InnoDB锁模式与锁类型有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"MySQL中InnoDB锁模式与锁类型有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2026年11月02日MySQL中InnoDB锁模式与锁类型有哪些

本篇内容介绍了"MySQL中InnoDB锁模式与锁类型有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

⒈InnoDB事务锁的构成
INNODB锁类型格式为:lock_mode|lock_type
例如:LOCK_X|LOCK_GAP|LOCK_REC,含义为这是一个写锁,他锁定的是一间隙(我们通常说的GAP lock),锁定的是一条记录(LOCK_REC)。
⒉InnoDB锁模式(lock_mode)
⑴锁模式类型
锁模式主要用来判断锁的兼容性
/* Basic lock modes */
enum lock_mode {
LOCK_IS = 0, /* intention shared */
LOCK_IX, /* intention exclusive */
LOCK_S, /* shared LOCK_S的值为2*/
LOCK_X, /* exclusive LOCK_X的值为3*/
LOCK_AUTO_INC, /* locks the auto-inc counter of a table
in an exclusive mode */
LOCK_NONE, /* this is used elsewhere to note consistent read */
LOCK_NUM = LOCK_NONE, /* number of lock modes */
LOCK_NONE_UNSET = 255
};
⑵锁模式兼容性矩阵
static const byte lock_compatibility_matrix[5][5] = {
/** IS IX S X AI */
/* IS */ { TRUE, TRUE, TRUE, FALSE, TRUE},
/* IX */ { TRUE, TRUE, FALSE, FALSE, TRUE},
/* S */ { TRUE, FALSE, TRUE, FALSE, FALSE},
/* X */ { FALSE, FALSE, FALSE, FALSE, FALSE},
/* AI */ { TRUE, TRUE, FALSE, FALSE, FALSE}
};
为了清晰,画出如下矩阵图(吐槽:这ITPUB缩进功能太差了,我下面的图片缩进不了):

⒊InnoDB锁类型(lock_type)
⑴InnoDB锁类型包括如下(锁类型表示施加锁的范围,是间隙(LOCK_GAP),还是记录(LOCK_REC_NOT_GAP)或者间隙加记录(LOCK_ORDINARY),对象是记录(LOCK_REC)还是表(LOCK_TABLE)或者等待(LOCK_WAIT))
#define LOCK_WAIT 256 /*用于锁冲突等待*/
#define LOCK_ORDINARY 0 /*next-key lock*/
#define LOCK_GAP 512 /*gap 锁*/
#define LOCK_REC_NOT_GAP 1024 /*record lock*/
#define LOCK_INSERT_INTENTION 2048 /*插入意向锁*/
#define LOCK_TABLE 16 /*!< table lock */
#define LOCK_REC 32 /*!< record lock */
#define LOCK_MODE_MASK 0xFUL /*锁模式掩码*/
#define LOCK_TYPE_MASK 0xF0UL /*锁类型掩码*/

⑵InnoDB锁类型冲突分析及矩阵
①源码分析注释:
if ((lock_is_on_supremum || (type_mode & LOCK_GAP))
&& !(type_mode & LOCK_INSERT_INTENTION)) {
/*GAP锁不需要等待任何锁类型(record lock,next-key lock,insert-intention) */
return(FALSE);
}
//不可能是LOCK_GAP,则只有LOCK_ORDINARY与LOCK_REC_NOT_GAP不等待LOCK_GAP
///*next-key lock或者record lock不需要等待Gap锁*/
if (!(type_mode & LOCK_INSERT_INTENTION)&& lock_rec_get_gap(lock2)) {
return(FALSE);
}
//LOCK_GAP&LOCK_INSERT_INTENSION 不等待LOCK_REC_NOT_GAP
//*GAP锁不需要等待LOCK_REC_NOT_GAP锁*/
if ((type_mode & LOCK_GAP)&& lock_rec_get_rec_not_gap(lock2)) {
return(FALSE);}
//*没有锁类型会等待意向锁*
if (lock_rec_get_insert_intention(lock2)) {
return(FALSE);}
②InnoDB锁类型冲突矩阵(注意,锁类型冲突通常是在相同的锁模式下的锁类型冲突,这里将上面的代码冲突画成图):

"MySQL中InnoDB锁模式与锁类型有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

类型 模式 冲突 矩阵 间隙 兼容性 内容 意向 更多 知识 还是 面的 分析 实用 相同 学有所成 接下来 事务 代码 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 广东猪兼强互联网科技有限公司 互联网科技公司税收优惠 金融科技还是互联网 互联网络科技有限公司 科技与互联网发展 深圳互联网络科技有限公司 智网互联网科技 苏州互联网科技贷款公司 电子科技大学互联网 常德市电业局互联网科技部 互联网科技与管理 世界互联网科技公司市值排名 深圳市优智互联网科技有限公司 中国科技创新与世界互联网大会 洛阳共同富裕互联网科技有限公司 群盈汇互联网科技有限公司 西安有哪些互联网高科技企业 互联网科技收购价值 北京瑞云互联网科技有限公司 互联网最新的科技 没上市的科技互联网公司 互联网科技股有哪些 多迪互联网科技有限公司 宝灵互联网科技有限公司 移动互联网年度科技创新 互联网在线教育科技创业 众联互联网络科技 互联网科技对化妆品行业 重庆科技产业互联网有哪些
0