InnoDB的7种锁
InnoDB有7种锁:
- 自增锁
- 特殊的表级别锁,针对事务插入auto_increment类型的列。保证数据一致性,即使是事务A正在插入数据,事务B的插入也要等待,保证事务AB插入的行是连续的字段值。
- 共享/排他锁
- 行级别锁,事务拿到某行的共享S锁才可读取该行,事务拿到某行的排他X锁,才可以修改或删除。
- 多个事务可以拿同一把S锁,即读读可并行。只有一个事务可以拿到X锁,写写/读写互斥。
- 意向锁
- 表级锁,IS锁与IX锁,弱锁,仅仅表明意向。
- 插入意向锁
- 针对insert的,如果插入位置不冲突,多个事务不会阻塞,以提高插入并发。
- 记录锁
- 封锁索引记录。 eg:select * from t where id=1 for update; 则在该索引记录加锁,阻止其他事务插入更新删除该行。
- 间隙锁
- 封锁索引记录中的间隔。eg:select * from t where id between 8 and 15
- 封锁索引记录中的间隔。eg:select * from t where id between 8 and 15
- 临键锁:
- 封锁索引记录,以及索引记录中间的间隔,在RR下有效,防止幻读;
浙公网安备 33010602011771号