内容来自《收割Offer:互联网大厂面经》

面试官提问

● 行锁与表锁有什么区别?

● 什么是记录锁、间隙锁与临键锁?数据库查询命中这些锁的条件是什么?

● 什么是乐观锁与悲观锁?

1 行锁

行锁锁住一行或者多行记录。行锁开销大,加锁慢,可能会出现死锁,但锁定粒度小、并发度高。InnoDB存储引擎默认的事务隔离级别为可重复读,并且在参数innodb_locks_unsafe_for_binlog = 0的模式下,行锁有3种类型:记录锁(record lock)、间隙锁(GAP lock)、临键锁(next-key lock)。

1)记录锁

记录锁锁住的是某一条记录,记录锁的触发条件是等值查询、命中唯一索引。在读已提交隔离级别下,只有记录锁模式。

2)间隙锁

间隙锁锁住的是一个区间,并且左右都是开区间。在读已提交隔离级别下,不会使用间隙锁,只有当隔离级别是可重复读和串行化时才会存在间隙锁。例如以下SQL语句: