msyql 锁
- 
无索引的全表扫描
 - 当查询条件未命中索引时,InnoDB 无法精确定位行,会将行锁升级为表锁36。
 - 例如:
SELECT * FROM table WHERE unindexed_column = 1 FOR UPDATE,此时会锁定整张表36。 - 意向锁是用来表明已经有行锁了。如果要加表锁,就要先申请意向锁。比如在update一条数据时,就会自动在这个表上加上一条意向排他锁(表锁),防止其它表锁。如果现在有一个ddl语句来执行,那么就会要求这个锁释放完才会获取到锁。
 
2. IX 锁与表级 X 锁冲突
场景描述:
- 事务1 对某行加 行级排他锁(X Lock),自动获取表的 意向排他锁(IX Lock)35。
 - 事务2 执行 
ALTER TABLE等 DDL 操作,需获取表的 排他锁(X Lock),但被事务1的 IX 锁阻塞35。 
三、注意事项
- 
锁升级机制
InnoDB默认使用行级锁,但在以下情况可能升级为表级锁:- 未命中索引的查询导致全表扫描时,可能触发表锁15。
 - 显式执行
LOCK TABLES语句时强制使用表级锁6。 
 - 
意向锁的辅助作用
表级意向锁(IS/IX)用于快速判断表中是否存在行级锁,避免全表扫描。例如:- 事务A对某行加行级S锁时,表级IS锁被记录6。
 - 事务B尝试加表级X锁时,检测到IS锁存在,直接阻塞57。
 
 
                    
                
                
            
        
浙公网安备 33010602011771号