首页 存档 技术 查看内容

MySQL特性分析innodb锁**继承与迁移

2018-3-30 13:00 |来自: 互联网 347 0

摘要: 架构师(JiaGouX)我们都是架构师! innodb行锁简介 行锁类型 LOCK_S:共享锁 LOCK_X: 排他锁 GAP类型 LOCK_GAP:只锁间隙 LOCK_REC_NO_GAP:只锁记录 LOCK_ORDINARY: 锁记录和记录之前的间隙 LOCK_INSERT_INT ...

架构师(JiaGouX)
我们都是架构师!


innodb行锁简介

  1. 行锁类型

LOCK_S:共享锁

LOCK_X: 排他锁

  1. GAP类型

LOCK_GAP:只锁间隙

LOCK_REC_NO_GAP:只锁记录

LOCK_ORDINARY: 锁记录和记录之前的间隙

LOCK_INSERT_INTENTION: 插入意向锁,用于insert时检查锁冲突


每个行锁由锁类型和GAP类型组成
例如:
LOCK_X|LOCK_ORDINARY 表示对记录和记录之前的间隙加排他锁
LOCK_S|LOCK_GAP 表示只对记录前的间隙加共享锁

锁的兼容性:
值得注意的是,持有GAP的锁(LOCK_GAP和LOCK_ORDINARY)与其他非LOCK_INSERT_INTENTION的锁都是兼容的,也就是说,GAP锁就是为了防止插入的。

详细可以参考之前的月报:http://mysql.taobao.org/monthly/2016/01/01/


innodb 锁**、继承与迁移

这里的锁**和合并,只是针对innodb行锁而言的,而且一般只作用于GAP类型的锁。


  • 锁**

    插入的记录的间隙存在GAP锁,此时此GAP需**为两个GAP

lock_rec_inherit_to_gap_if_gap_lock:


for (lock = lock_rec_get_first(block, heap_no);

lock != NULL;

lock = lock_rec_get_next(heap_no, lock)) {


if (!lock_rec_get_insert_intention(lock)

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部