(面试题)给你一个SQL,问锁的是什么?

30 阅读1分钟

给你一条SQL语句:

update student set name = '张三' where age = 12

面试官:加的锁是什么?

答:首先假设现在隔离级别是RR可重复读,然后谈加的什么锁

(1)情况1:age没有加索引,加的是表锁

(2)情况2:age加了普通索引。如果age有等于12的人,那么就在索引上加锁,加的是间隙锁 + 记录锁。不仅锁住现有age = 12的人,还要锁住间隙age = 12,防止新数据插入。如果age没有等于12的人,只加间隙锁

(3)情况3:age加了唯一索引,和情况2很像,但是最多锁一条记录