共计 1085 个字符,预计需要花费 3 分钟才能阅读完成。
自动写代码机器人,免费开通
丸趣 TV 小编给大家分享一下 Mysql-InnoDB 锁的示例分析,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
锁类型
行级锁
锁模式只有 LOCK_S 和 LOCK_X,其他的 FLAG 用于锁的描述,如前述 LOCK_GAP、LOCK_REC_NOT_GAP 以及 LOCK_ORDINARY、LOCK_INSERT_INTENTION 四种描述。(相关推荐:MySQL 教程)
LOCK_REC_NOT_GAP
LOCK_GAP
LOCK_ORDINARY(Next-Key Lock)
LOCK_INSERT_INTENTION
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}
};
对于 GAP 类型(锁对象建立在 supremum 上或者申请的锁类型为 LOCK_GAP)且申请的不是插入意向锁时,无需等待任何锁,这是因为不同 Session 对于相同 GAP 可能申请不同类型的锁,而 GAP 锁本身设计为不互相冲突;
LOCK_ORDINARY 或者 LOCK_REC_NOT_GAP 类型的锁对象,无需等待 LOCK_GAP 类型的锁;
LOCK_GAP 类型的锁无需等待 LOCK_REC_NOT_GAP 类型的锁对象;
任何锁请求都无需等待插入意向锁。
表级锁
InnoDB 的表级别锁包含五种锁模式:LOCK_IS、LOCK_IX、LOCK_X、LOCK_S 以及 LOCK_AUTO_INC 锁,锁之间的相容性遵循数组 lock_compatibility_matrix 中的定义。
InnoDB 表级锁的目的是为了防止 DDL 和 DML 的并发问题。但从 5.5 版本开始引入 MDL 锁后,InnoDB 层的表级锁的意义就没那么大了,MDL 锁本身已经覆盖了其大部分功能。
意向锁是表级别的,IS 和 IX 锁之间相互并不冲突,但与表级 S / X 锁冲突。
在对记录加 S 锁或者 X 锁时,必须保证其在相同的表上有对应的意向锁或者锁强度更高的表级锁。
看完了这篇文章,相信你对 Mysql-InnoDB 锁的示例分析有了一定的了解,想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!
向 AI 问一下细节
丸趣 TV 网 – 提供最优质的资源集合!