带你读《2022技术人的百宝黑皮书》——mysql锁机制的再研究(3)https://developer.aliyun.com/article/1340032?groupCode=taobaotech
锁组合
虽然我们了解了上述知识,但是看死锁日志时偶尔也会一脸懵,是因为实际运行他们是组合起来共同完成的锁机制。
锁 的 模 式 : lock_s(读锁,共享锁) lock_x(写锁,排它锁)
锁的类型:
Record_Lock (锁记录)
Gap_Lock (锁记录前的GAP)
Next-Key Lock (同时锁记录+记录前的GAP) insert_Intention_Lock (插入意向锁,其实是特殊的GAP锁)
锁模型可以和锁类型任意组合,如:
locks gap before rec,表示为gap锁:lock->type_mode & LOCK_GAP
locks rec but not gap,表示为记录锁,非gap锁:lock->type_mode & LOCK_REC_NOT_GAP insert intention,表示为插入意向锁:lock->type_mode & LOCK_INSERT_INTENTION waiting,表示锁等待:lock->type_mode & LOCK_WAIT
在mysql源码中使用了uint32类型来表示锁, 最低的 4 个 bit 表示 lock_mode, 5-8 bit 表示 lock_type(目前只用了 5 和 6 位,大小为 16 和 32 ,表示 LOCK_TABLE 和 LOCK_REC), 剩下的高位 bit 表示行锁的类型record_lock_type
insert语句加锁详解
唯一性索引插入
非唯一性索引插入
带你读《2022技术人的百宝黑皮书》——mysql锁机制的再研究(5)https://developer.aliyun.com/article/1340029?groupCode=taobaotech