Skip to content

面试速答(先看这里)

**一句话结论:**唯一索引和主键索引是数据库中两种常见的索引类型。

60秒标准回答:

唯一索引和主键索引是数据库中两种常见的索引类型。他们之所以放在一起比较,是因为他们都需要保证唯一性。但是他们还是有很多区别的

唯一性 :主键索引其实是一种特殊的唯一索引,他们都具有唯一性;也就是在一张表中,不能有两行有相同的主键;在同一张表中,主键索引字段的所有值都是唯一的

是否可空 :主键索引是不能为NULL的,而唯一键索引是可以为NULL的

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**唯一性 :主键索引其实是一种特殊的唯一索引,他们都具有唯一性;
  • **要点2:**是否可空 :主键索引是不能为NULL的,而唯一键索引是可以为NULL的。
  • **要点3:**是否可以有多个 :主键索引在一张表中只能有一个,而唯一索引在一张表中可以创建多个。
  • **要点4:**索引结构 :在InnoDB中,主键索引就是聚簇索引,而唯一索引通常是非聚簇索引。
  • **要点5:**这是因为有的时候,我们可能没有创建主键索引,那么,MySQL会默认选择一个唯一的非空索引作为聚簇索引。

**记忆锚点:**主键索引 → 而唯一索引 → 通常是非聚簇索引 → 索引结构 → NULL → 据库中两种常见的索引

易错提醒:

  • 也就是在一张表中,不能有两行有相同的主键;
  • 是否可空 :主键索引是不能为NULL的,而唯一键索引是可以为NULL的。

追问准备:

  • 围绕「主键索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「而唯一索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「通常是非聚簇索引」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

唯一索引和主键索引是数据库中两种常见的索引类型。他们之所以放在一起比较,是因为他们都需要保证唯一性。但是他们还是有很多区别的。

唯一性:主键索引其实是一种特殊的唯一索引,他们都具有唯一性;也就是在一张表中,不能有两行有相同的主键;在同一张表中,主键索引字段的所有值都是唯一的。

是否可空:主键索引是不能为NULL的,而唯一键索引是可以为NULL的。

是否可以有多个:主键索引在一张表中只能有一个,而唯一索引在一张表中可以创建多个。

索引结构:在InnoDB中,主键索引就是聚簇索引,而唯一索引通常是非聚簇索引。

为啥说唯一索引通常是非聚簇索引呢?

这是因为有的时候,我们可能没有创建主键索引,那么,MySQL会默认选择一个唯一的非空索引作为聚簇索引。所以,唯一索引也可能被选为聚簇索引。

📄 ✅MySQL的主键一定是自增的吗?

是否回表:基于主键索引的查询一定不需要回表,基于唯一索引的查询,通常是需要回表的(这里的通常和上面的通常是一个事儿)

**外键:**主键可以被其他表引用为外键,而唯一索引是不可以的。