mysql七种锁

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

Java笔记之InnoDB共有七种类型的锁

一、自增锁(Auto-inc Locks)

专门针对事务插入AUTO_INCREMENT类型的主键自增序列;属于表级锁

二、共享/排它锁(Shared and Exclusive Locks)

共享(S锁)锁之间不排斥,读读并行;排他(X锁)锁互斥;写写不可并行属于行级锁

数据的多版本,通过读取旧版本的数据能够极大限度提高并发性;共享锁的最大问题是不能充分并行,读写不可并行,解决思路数据多版本

三、意向锁(Intention Locks)

表级别的锁;意向锁分为:

意向共享锁(intention shared lock, IS),它预示着,事务有意向对表中的某些行加共享S锁;事务想要获取S锁,必须先获取IS锁。

意向排它锁(intention exclusive lock, IX),它预示着,事务有意向对表中的某些行加排它X锁;事务想要获取X锁,必须先获取IX锁。

四、插入意向锁(Insert Intention Locks)

提高插入并发;修改删除使用强互斥性,保证修改删除的串行性。

五、记录锁(Record Locks)

完整行锁;封锁索引记录。

六、间隙锁(Gap Locks)

完整行锁;它封锁索引记录中的间隔,或者第一条索引记录之前的范围,又或者最后一条索引记录之后的范围; 目的:为了防止其他事务在间隔中插入数据,以导致“不可重复读”;如果把事务的隔离级别降级为RC,间隙锁则会失效。

七、临键锁(Next-key Locks)

完整行锁;记录锁与间隙锁的组合,它的封锁范围,既包含索引记录,又包含索引区间; 主要目的,也是为了避免幻读(Phantom Read)。如果把事务的隔离级别降级为RC,临键锁则也会失效。