MySQL 篇

第 1 题(事务)

题目:
MySQL 的事务四大特性(ACID) 是什么?请逐一解释。

另外追问:MySQL 的 隔离级别 有哪些?分别解决了什么问题(脏读、不可重复读、幻读)?InnoDB 默认的隔离级别是什么?

答:
四大隔离级别:

  1. 原子性——事务中的操作要么都执行,要么都不执行
  2. 一致性——事务执行前后,不破坏约束(主键、外键等)
  3. 持久性——事务一旦提交,数据不会丢失
  4. 隔离性——并发执行的事务之间相互隔离

隔离级别:

  1. 读未提交
  2. 读已提交——解决脏读
  3. 可重复读——解决不可重复读
  4. 串行化——解决幻读

InnoDB默认隔离级别:
可重复读

第 2 题(MySQL 锁)

题目:
InnoDB 的行锁有几种类型?间隙锁(Gap Lock) 和 临键锁(Next-Key Lock)
是什么?它们分别在什么隔离级别下生效?主要解决了什么问题?

答:
行锁有如下类型:

  1. 记录锁
  2. 间隙锁
  3. 临键锁(记录锁+间隙锁)

间隙锁,对涉及到的数据的相关范围进行加锁
临建锁,记录锁和间隙锁的结合,同样对范围加锁,但是可以像记录锁那样把具体的某一行数据也包括进来
记录锁在读已提交和可重复读生效,解决了脏读的问题
间隙锁和临键锁在可重复读生效,解决了不可重复读的问题