MySQL面试必备(一)基础篇

1. 数据库的三大范式?

  1. 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。
  2. 第二范式:确保表中每列都和主键相关。
  3. 第三范式:确保每列都和主键列直接相关而不是间接相关。

2. MySQL支持哪些存储引擎?

支持多种存储引擎,如InnoDB,MyISAM,Memeory,Archive等。
InnoDB是MySQL的默认存储引擎,也是大多数场景下最合适的。
InnoDB和MyISAM的区别:

InnoDB MyISAM
事务 支持 不支持
外键 支持 不支持
聚集索引 是(主键) 非(指针)主键独立
全文索引 不支持 支持(效率高)
行级锁(默认)、表级锁 表级锁(默认)

3. 超键、候选键、主键、外键分别是什么?

  1. 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
  2. 候选键:最小超键,没有冗余元素的超键。
  3. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或者属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空(NULL)。
  4. 外键:在一个表中存在另一个表的主键,将两张表关联起来,称为外键。

4. SQL约束有哪几种?

  1. NOT NULL:用于控制字段的内容一定不能为空(NULL)。
  2. UNIQUE:控制字段内容不能重复,一个表允许有多个Unique约束。
  3. PRIMARY KEY:用于控制字段内容不能重复,在表中只允许存在一个主键。
  4. FOREIGH KEY:用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
  5. CHECK:用于控制字段的值范围。

5. MySQL中的VARCHAR和CHAR区别

CHAR定长,VARCHAR变长。
VARCHAR占用的空间为实际字符长度+1,最后一个字符存储使用了多大的空间。

6. MySQL中 in 和 exists 的区别

in 语句是把外表和内表作 hash 连接,而 exists 语句是对外表作 loop 循环再对内表进行查询。
效率问题:如果查询的两个表大小相当,那么用 in 和 exists 差别不大。如果两个表一小一大,则子查询表大的用 exists,表小的用 in
not in 和 not exists:如果查询语句用 not in,则内外表进行全表扫描,没有用到索引。而not exists 的子查询依然能用到表上的索引。not exists 的效率更高。

7. drop、delete、truncate的区别:

drop 删除表的内容和所有结构,DDL
delete 删掉表的内容,DML语句,支持回滚
truncate 清空表内容但保留表的结构。DDL
执行速度:drop > truncate > delete

8. MySQL执行查询的过程

  1. 客户端通过TCP连接发送连接请求到MySQL连接器,连接器会对该请求进行权限验证及连接资源分配
  2. 查缓存。(当判断缓存是否命中时,MySQL不会进行解析查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息。所以,任何字符上的不同,例如空格、注解等都会导致缓存的不命中)
  3. 语法分析。如何把语句给到预处理器,检查数据表和数据列是否存在,解析别名看是否存在歧义。
  4. 优化。是否使用索引,生成执行计划。
  5. 交给执行器,将数据保存到结果集中,同时会逐步将数据缓存到查询缓存中,最终将结果集返回给客户端。

9. 数据库语言

  1. 数据定义语言(define,DDL):CREATE DROP ALTER
  2. 数据查询语言(query,DQL):SELECT
  3. 数据控制语言(control,DCL):GRANT REVOKE
  4. 事务控制语言 (Transaction control language,TCL):COMMIT ROLLBACK

。。。持续学习中

你可能感兴趣的:(MYSQL,mysql,面试,数据库)