博客
关于我
MySQL连环炮,你扛得住嘛?
阅读量:790 次
发布时间:2023-02-13

本文共 2476 字,大约阅读时间需要 8 分钟。

MySQL 面试准备指南:从基础到高级知识点全解析

在 MySQL 面试中,掌握核心知识点是成功的关键。以下是针对 MySQL 的常见面试问题及解决方案,帮助你快速提升面试准备水平。


一、三大范式及其应用

1NF(第一范式)

1NF 是关系型数据库的基本要求,要求每个属性(字段)只能有一个值,不能再分割。例如,一个字段不能同时存储多个地址信息。

2NF(第二范式)

2NF 要求每个实例或行都可以被唯一地区分,主要通过主键实现。非主属性必须依赖主键。

3NF(第三范式)

3NF要求每列都直接与主键相关,不能间接相关。例如,不能有中间表连接两个独立的实体。

注意:在实际开发中,3NF 不是硬性要求,灵活应用根据需求选择。


二、DML 与 DDL 的区别

DML(Data Manipulation Language)

  • 数据操作语言,支持插入、更新、删除和查询操作。
  • 主要由开发人员使用。

DDL(Data Definition Language)

  • 数据定义语言,用于创建、修改和删除数据库对象。
  • 更多由数据库管理员(DBA)操作。

区别:DDL 操作不会生成日志,立即生效;DML 操作会生成 binlog。


三、主键与外键的区别

主键

  • 唯一标识一行数据,不能重复且不能为空。
  • 每个表只能有一个主键。

外键

  • 用于表与表之间建立联系,外键引用另一表的主键。
  • 外键可以重复且可以为空。
  • 一张表可以有多个外键。

注意:外键不强制要求其对应的主键存在。


四、droptruncatedelete 的区别

用法

  • drop table:删除表及其数据。
  • truncate table:清空表数据,自增值重置。
  • delete from table:删除特定行数据。

属于的数据库语言

  • droptruncate 属于 DDL。
  • delete 属于 DML。

执行速度

  • drop 最快,truncate 次之,delete 最慢。

注意truncate 不产生日志,delete 生成 binlog。


五、MySQL 的基础架构

组件解析

  • 连接器:身份验证和权限管理。
  • 查询缓存:优化查询性能。
  • 分析器:检查 SQL 语法。
  • 优化器:选择最佳执行方案。
  • 执行器:执行 SQL 语句。
  • 插件式存储引擎:支持 InnoDB、MyISAM 等。

六、MyISAM 与 InnoDB 的区别

1. 锁机制

  • MyISAM 只支持表级锁。
  • InnoDB 支持行级锁和表级锁。

2. 事务支持

  • MyISAM 不支持事务。
  • InnoDB 提供强大的事务支持。

3. 外键支持

  • MyISAM 不支持外键。
  • InnoDB 支持外键。

4. 性能

  • InnoDB 读写能力更强,适合高并发场景。

七、自增主键的优缺点

优点

  • 插入新记录时,自增值直接追加到尾部,维护成本低。

缺点

  • 索引页分裂频繁,影响性能。

八、为什么自增主键不连续?

原因

  • 自增值在 MyISAM 存储引擎中是临时保存,未持久化。
  • 事务回滚和唯一键冲突导致自增值无法恢复。

九、redo log 的作用

功能

  • 提供崩溃恢复能力。
  • 记录数据修改日志。

写入机制

  • 事务提交时刷盘。
  • 后台线程定期刷盘。

十、binlog 的作用

功能

  • 数据备份和主从复制。
  • 记录 SQL 语句日志。

格式

  • statement:记录 SQL 原文。
  • row:记录具体操作数据。
  • mixed:根据 SQL 操作类型选择格式。

十一、redologbinlog 的区别

区别点

  • redolog 是 InnoDB 的日志,记录具体数值。
  • binlog 是服务器层日志,记录操作内容。
  • redolog 文件固定大小循环利用。
  • binlog 文件支持多个文件。

十二、两阶段提交的意义

原理

  • redolog 写入分为两个阶段:preparecommit
  • 失败时,事务自动回滚。

优势

  • 保证数据一致性,即使 binlog 写入失败,也能回滚事务。

十三、undo log 的作用

功能

  • 回滚事务,确保原子性。
  • 记录数据修改历史,支持快照读和当前读。

十四、relaylog 的作用

功能

  • 主从复制中介日志。
  • slave 从节点读取 relaylog 数据进行同步。

十五、索引的使用原则

建立索引的规则

  • 不为 NULL 的字段优先索引。
  • 频繁查询或排序的字段索引。
  • 频繁作为 WHERE 条件的字段索引。

避免索引失效

  • 避免 SELECT * 查询。
  • 最左前缀匹配原则。

十六、事务特性

特性总结

  • 原子性:不可分割。
  • 一致性:数据完整性。
  • 隔离性:多用户隔离。
  • 持久性:数据永久性。

十七、并发事务问题

常见问题

  • 脏读:未提交事务数据被读取。
  • 丢失修改:事务读取数据时被修改。

解决方法

  • 使用 REPEATABLE-READ 隔离级别。

十八、MVCC 的优势

优势

  • 无锁控制,提升并发性能。
  • 基于版本控制,避免幻读。

十九、锁的粒度

锁类型

  • 行锁:锁定单行数据。
  • 表锁:锁定整个表。
  • 共享锁:读锁。
  • 排他锁:写锁。

二十、查询执行过程

流程

  • 权限校验。
  • 查询缓存。
  • 分析器检查语法。
  • 优化器选择执行方案。
  • 执行器执行 SQL。
  • 引擎处理数据。

  • 二一、更新语句执行过程

    流程

  • 权限校验。
  • 记录 binlog。
  • 更新数据并写入 redo log。
  • 提交事务。

  • ##二二、SQL 优化技巧

    常见优化方法

    • 避免全表扫描。
    • 避免使用 !=OR
    • 减少函数和运算。
    • 正确使用索引。

    二三、主从复制的实现

    主库角色

    • 写入 binlog 文件。
    • 创建 log dump 线程通知 slave。

    从库角色

    • 读取 relaylog 文件并执行。

    二四、延迟优化方法

    常用方式

    • 并行复制。
    • 提高机器配置。
    • 分库分表策略。
    • 避免长事务。

    二五、长事务的弊端

    问题

    • 占用锁资源。
    • 占用内存。
    • 影响主从延迟。

    通过以上知识点的掌握,你就能在 MySQL 面试中游刃有余地应对各种问题。如果需要更深入的内容,可以参考相关技术文档或阿Q的其他文章。

    转载地址:http://nmdfk.baihongyu.com/

    你可能感兴趣的文章
    mysql添加索引
    查看>>
    mysql添加表注释、字段注释、查看与修改注释
    查看>>
    mysql清理undo线程_MySQL后台线程的清理工作
    查看>>
    mysql清空带外键的表
    查看>>
    MySQL清空表数据
    查看>>
    mysql源码安装
    查看>>
    Mysql源码安装过程中可能碰到的问题
    查看>>
    MySQL灵魂16问,你能撑到第几问?
    查看>>
    MySQL灵魂拷问:36题带你面试通关
    查看>>
    mysql状态分析之show global status
    查看>>
    mysql状态查看 QPS/TPS/缓存命中率查看
    查看>>
    mysql生成树形数据_mysql 实现树形的遍历
    查看>>
    mysql用于检索的关键字_Mysql全文搜索match...against的用法
    查看>>
    MySQL用得好好的,为什么要转ES?
    查看>>
    MySql用户以及权限的管理。
    查看>>
    MySQL用户权限配置:精细控制和远程访问的艺术!------文章最后有惊喜哦。
    查看>>
    mysql用户管理、常用语句、数据分备份恢复
    查看>>
    MySQL留疑问:left join时选on还是where?
    查看>>
    mysql登陆慢问题解决
    查看>>
    Mysql百万级数据查询优化
    查看>>