共享锁排他锁
行级锁
- s lock read
- x lock update or delete
意向锁
表级锁
允许行级和表级锁共存
- IS intend to set s lock
- IX intend to set X lock
Select ... lock in share mode(IS)
select ... for update (IX)
获取s锁之前,必须获取IS或更高的锁
获取x之前,必须获取IX
意向锁不会阻塞除非全表请求(lock tables ... write)
link1处理加表锁的情况
Record lock
- 锁一个索引记录
- 没有定义索引时,使用Innodb自建的聚集索引
Gap lock
next key lock
record lock和索引前的gap的gap lock
link
insert intention lock
insert位置前的gap lock
insert会对插入成功的行加上排它锁,这个排它锁是个记录锁。如果insert 的事务出现了duplicate-key error ,事务会对duplicate index record加共享锁。这个共享锁在并发的情况下是会产生死锁的。见link