MySQL高频面试题详解:基础、数据类型与存储引擎

需积分: 0 0 下载量 201 浏览量 更新于2024-08-03 收藏 3.05MB PDF 举报
【数据面试系列】MySQL高频面试题及知识要点是一份全面的面试指南,旨在帮助求职者准备MySQL相关的技术面试。该文档由经验丰富的架构师昌哥编撰,内容涵盖MySQL的基础知识、数据类型以及存储引擎等方面。 第一部分:MySQL基础知识 1. 三大范式:这是数据库设计的基本原则,包括第一范式(消除重复元组)、第二范式(消除非主键属性对键的部分依赖)和第三范式(消除非传递依赖)。理解这些范式对于设计高效、结构良好的数据库至关重要。 2. MySQL查询的大小写敏感性:MySQL默认情况下区分大小写,但在某些配置下可以设置为不区分。 3. REGEXP 是正则表达式匹配函数,用于模式匹配,常用于搜索和替换操作,特别是在文本处理和数据清洗场景。 4. 视图、存储过程和触发器:视图是虚拟表,基于查询结果;存储过程是预编译的SQL语句集合,可多次执行;触发器是在特定事件发生时自动执行的SQL脚本,如数据修改。 5. MySQL默认端口 是3306,用于客户端连接服务器。 6. 检测端口运行状态 可通过命令行工具(如`telnet`或`nc`)尝试连接,或者使用系统服务查看工具如`netstat`。 7. 分区表 是根据某个列的值将大表划分为多个较小部分,提高查询性能。 8. 分区类型 包括单分区、范围分区、列表分区、哈希分区等,每种方式适用于不同的数据分布和查询需求。 9. 字符集查看 通过`SHOW VARIABLES LIKE 'character_set_database';`查询当前数据库的字符集设置。 10. 存储过程 优点包括代码复用、安全性、事务处理等;缺点有执行效率较低、维护成本高和可能导致SQL注入风险。 11. LIKE和REGEXP的区别:LIKE用于基本模式匹配,%代表零个或多个字符,_代表一个字符;REGEXP支持更复杂的正则表达式,功能更强大但效率相对较低。 第二部分:MySQL数据类型 1. 非标准字符串类型 包括用户自定义的数据类型,不遵循标准SQL定义。 2. ENUM 是预定义的枚举类型,用于限制数据取值范围。 3. 隐式转换 是MySQL自动进行的类型转换,例如数字和字符串之间的相互转换。 4. 常见数据类型 如整型(TINYINT, SMALLINT, INTEGER, BIGINT)、浮点型(FLOAT, DOUBLE)、日期/时间类型(DATE, DATETIME, TIMESTAMP)等。 5. 字符串类型 如CHAR, VARCHAR, TEXT, BINARY等,考察它们在存储和长度上的差异。 6. 货币类型 使用DECIMAL或NUMERIC来精确表示金额,DOUBLE则提供更高的精度但可能损失精度。 7. NOW()和CURRENT_DATE():前者返回当前日期和时间,后者只返回当前日期,用于记录操作时间。 8. BLOB和TEXT:BLOB用于存储二进制数据,TEXT用于存储大文本,两者在存储和查询性能上有所不同。 9. 时间戳转换 学习如何在Unix时间戳和MySQL时间戳之间进行转换。 10. FLOAT和DOUBLE:FLOAT通常占用较少内存,但精度较低;DOUBLE精度更高,但占用更多空间。 11. CHAR和VARCHAR:CHAR固定长度,VARCHAR变长,CHAR在存储时浪费空间,VARCHAR节省空间但查询可能较慢。 12. TIMESTAMP类型 的行为,如自动更新、存储精度等。 13. AUTO_INCREMENT 的处理,当达到最大值后如何处理以及如何跟踪最近的自动递增值。 14. 自增ID作为主键 的优势在于简化数据完整性管理和性能优化。 第三部分:MySQL存储引擎 1. 常见存储引擎 包括InnoDB、MyISAM、MEMORY等,各引擎有不同的特性和适用场景。 2. ISAM和MyISAM:ISAM是早期版本的MyISAM,MyISAM支持行级锁定,适合读多写少的情况。 3. InnoDB 支持事务、行级锁定和行格式,适合频繁更新和事务处理。 4. HEAP表 无表级别的结构,数据直接存储在磁盘上,管理方式类似内存。 5. federated表 允许跨数据库连接,用于处理分布式数据。 6. 回表查询 当从一个远程表查询数据时,可能需要回查到本地表的过程。 7. MyISAM和InnoDB的区别:MyISAM不支持事务,而InnoDB支持;MyISAM易于扩展,但InnoDB有更好的并发性和恢复能力。 8. MyISAMStatic和MyISAMDynamic:动态表指每次插入新行都会创建新的数据页,静态表则会自动扩展数据页。 9. redo log, binlog, undolog:分别用于记录事务日志、二进制日志和错误日志,用于数据库恢复和复制。 通过掌握这些知识点,求职者可以更好地应对MySQL面试,展示其深入理解和实践经验。