MySQL是世界上最流行的开源关系型数据库管理系统之一,面试中经常会有涉及MySQL的知识点考察。以下是针对提供的面试题目的详细解析: 1. NOW()CURRENT_DATE()的区别: NOW()函数返回当前日期和时间,包括小时、分钟和秒,而CURRENT_DATE()仅返回当前日期。 2. CHARVARCHAR的区别: - CHAR是固定长度的字符串类型,存储时会用空格填充到指定长度,检索时会去掉尾部空格。 - VARCHAR是变长度的字符串类型,只存储实际需要的字符,节省空间。 3. 主键索引唯一索引: - 主键是一种约束,确保数据的唯一性和完整性,不允许有空值,且一张表只能有一个主键。 - 唯一索引是一种索引,允许有空值,可以有多个。唯一索引不一定是主键,但主键必定是唯一的。 4. MySQL的不同表格类型: - MyISAM:非事务处理,速度快,占用空间少,但不支持行级锁定。 - Heap(MEMORY):数据存储在内存中,速度快,但数据重启后丢失。 - Merge:用于合并多个MyISAM表。 - InnoDB:支持事务处理,行级锁定,安全性高。 - ISAM:旧的存储引擎,不常用,支持全文索引。 5. SQL生命周期: -连接数据库,提交SQL请求。 -解析SQL,生成执行计划。 -执行查询,读取数据,逻辑处理。 -将结果发送回客户端。 -断开连接,释放资源。 6. 查看索引:使用SHOW INDEX FROM命令可以查看表的所有索引。 7. 为什么使用B+树而非B树: - B+树更利于顺序检索,适合数据库中常见的范围查询。 - B+树的空间利用率更高,减少I/O操作。 - B+树的叶子节点链接形成有序链表,便于遍历。 - B+树增删节点效率更高,所有数据都在叶子节点,无需像B树那样向上调整。 8. 数据库三大范式: -第一范式:列不可再分。 -第二范式:非主键列完全依赖于主键。 -第三范式:非主键列只依赖于主键,不依赖其他非主键。 9. SQL查询优化: -避免全表扫描,为查询列建立索引。 -避免在WHERE子句中使用IS NULLOR,可能导致全表扫描。 -使用SELECT子句指定需要的列,避免使用。 -考虑使用覆盖索引以减少回表操作。 10. 覆盖索引回表: -覆盖索引:查询列完全由索引覆盖,不需要回表获取数据。 -回表*:查询时,二级索引需要回到主索引以获取数据。