资讯专栏INFORMATION COLUMN

Mysql-InnoDB 锁学习

hiyang / 2198人阅读

摘要:表级锁的表级别锁包含五种锁模式以及锁,锁之间的相容性遵循数组中的定义。表级锁的目的是为了防止和的并发问题。意向锁是表级别的,和锁之间相互并不冲突,但与表级锁冲突。

锁类型 行级锁

锁模式只有LOCK_S 和LOCK_X,其他的 FLAG 用于锁的描述,如前述 LOCK_GAP、LOCK_REC_NOT_GAP 以及 LOCK_ORDINARY、LOCK_INSERT_INTENTION 四种描述。

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锁时,必须保证其在相同的表上有对应的意向锁或者锁强度更高的表级锁。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17908.html

相关文章

  • Mysql-InnoDB 事物学习

    摘要:幻读在一个事务中,同一个范围内的记录被读取时,其他事务向这个范围添加了新的记录。分布式事物提供访问事物资源的方法协调参与全局事物中的各个事物定义事物的便捷,指定全局事物中的操作 事物基本概念 事物的特性(ACID) 原子性 atomicity 一致性 consistency 隔离性 isolation 持久性 durability 事物的类型 扁平事物 带有保存点的扁平事物 链事物 ...

    voyagelab 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<