导航菜单

锁机制专题

锁是 MySQL 并发控制的核心机制,理解各种锁的类型、粒度和使用场景是面试的必考内容。

常见题型

题型核心知识点典型问题
锁类型共享锁、排他锁、意向锁S 锁 vs X 锁、意向锁的作用
锁粒度表锁、行锁、页锁InnoDB 为什么用行锁
间隙锁Gap Lock、Next-Key Lock间隙锁的作用、范围查询加锁
死锁死锁产生、检测、避免如何避免死锁、死锁日志分析
锁升级行锁升级表锁InnoDB 会有锁升级吗

锁类型对比

锁类型符号作用范围兼容性用途
共享锁(S)LOCK_S行/表S↔S读操作
排他锁(X)LOCK_X行/表X↔无写操作
意向共享锁(IS)LOCK_ISIS↔IS, IS↔IX表级意向锁
意向排他锁(IX)LOCK_IXIX↔IX表级意向锁
间隙锁(Gap)LOCK_GAP范围Gap↔Gap防止幻读
临键锁(Next-Key)LOCK_ORDINARY范围+记录Gap↔Gap防止幻读

锁粒度对比

粒度并发度开销引擎
表锁MyISAM
行锁InnoDB
页锁BDB

死锁场景

场景示例
不同顺序加锁A: 1→2, B: 2→1
索引丢失更新时索引失效,升级为表锁
外键关联子表加锁,父表加锁
自增锁INSERT 并发插入

死锁处理

方法说明
超时等待innodb_lock_wait_timeout
死锁检测innodb_deadlock_detect
回滚事务回滚代价小的事务

章节

搜索