锁
行锁
Record Lock
select * from user where id = 1 for update; -- 将id = 1这一行锁住
Gap Lock
-- id 1 6 8 12
-- name 张三 李四 王五 赵六
select * from user where id = 4 for update; -- 将锁住(1,6)
Next-Key Lock
RR级别下默认加临键锁
可能会退化为记录锁(唯一索引的等值查询命中一条数据)或者间隙锁(唯一索引的等值查询没有命中数据)
Insert Intention Lock
是什么:由插入操作在行插入之前设置的间隙锁。这种锁表明了插入的意图
怎么加锁:假设有索引记录的值为 4 和 7。分别尝试插入值为 5 和 6 的不同事务,在获取插入行的独占锁之前,各自用插入意向锁锁定 4 和 7 之间的间隙,但由于行不冲突,所以它们不会相互阻塞。但是如果他们的都要插入6,那么就会需要阻塞了
表锁
意向锁
问:什么时候加意向锁? 答:增、删、改都会加意向排他锁,查(SELECT ... FOR UPDATE)可能会加 IS 或 IX
问:意向锁会与行锁冲突吗? 答:意向锁不会和行级锁互斥,但会影响表级锁的申请。