博客
关于我
MySQL高频面试题
阅读量:790 次
发布时间:2023-02-13

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

MySQL数据库基础知识

数据库的三大范式

数据库的设计需要遵循三大范式,以保证数据的一致性和完整性。以下是三大范式的详细解释:

  • 第一范式(1NF)

    确保数据库表字段的原子性。字段内容必须是单一的、不可再分割的值。例如,字段 userInfo: 广东省 10086 必须拆分为两个字段:userInfo: 广东省userTel: 10086

  • 第二范式(2NF)

    首先满足第一范式,另外包含两部分内容:

    • 表必须有一个主键。
    • 非主键列必须完全依赖于主键,而不能只依赖于主键的一部分。
      例如,选课关系表 student_course 的主键为 (student_no, course_name),如果学生课程中 student_no 的学分完全依赖于 course_name,则需要拆分为三个表:学生表、课程表和选课关系表。
  • 第三范式(3NF)

    首先满足第二范式,另外非主键列必须直接依赖于主键,不能存在传递依赖。例如,学生关系表中的学院信息如果依赖于学生的学院 ID,而学院的地点和电话也依赖于学院 ID,则需要拆分为两个表:学生表和学院表。

  • 2NF 和 3NF 的区别

    • 2NF 的依据是非主键列是否完全依赖于主键。
    • 3NF 的依据是非主键列是否直接依赖于主键,不能存在传递依赖。

    事务的四大特性(ACID)

    事务特性包括:

  • 原子性(Atomicity):所有操作要么全部成功,要么全部失败回滚。
  • 一致性(Consistency):事务执行前后数据库处于一致性状态。
  • 隔离性(Isolation):一个事务只能读到已经提交的修改。
  • 持久性(Durability):一旦提交,数据改变是永久的,即使在数据库故障时也不会丢失。
  • 事务隔离级别

    MySQL 提供四种隔离级别:

  • 脏读(Dirty Read):未提交事务的数据可以被其他事务读取。
  • 不可重复读(Repeatable Read):同一事务范围内多次查询会返回相同数据。
  • 幻读(Phantom Read):查询范围内的记录在事务期间发生了变化。
  • 串行化(Serializable):确保事务不会相互冲突,避免幻读。
  • 默认隔离级别为 Repeatable Read

    代码示例

    -- 查看当前隔离级别SELECT @@transaction_isolation;-- 设置隔离级别为读已提交SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

    生产环境数据库的隔离级别选择

    在生产环境中,通常使用 RC(Read Committed)作为默认隔离级别。

    • RR(Repeatable Read) 随着并发性较高,容易导致死锁和索引冲突。
    • RC 在并发性和安全性之间找到平衡,适合大多数场景。

    编码与字符集

    数据库中的数据存储和传输都是以二进制形式进行的。为了处理文本数据,需要使用编码机制。

    • ASCII:使用 1 个字节表示符号,支持 128 个基础符号和 128 个扩展符号。
    • GB2312:用于中文编码,支持更多字符。
    • UTF-8:基于 Unicode 编码,支持多语言,字符表示方式更加灵活。
    • UTF-8mb4:是 UTF-8 的扩展版本,支持更多字符,适合现代应用需求。

    索引的作用与设计

  • 索引的作用

    索引通过存储引擎(如 B+ 树)实现,用于快速定位数据。

    • 加快数据查找速度。
    • 优化排序和连接操作。
  • 索引的优缺点

    • 优点:提高查询效率,降低磁盘 I/O 消耗。
    • 缺点:占用物理空间,影响增删改操作性能。
  • 索引的分类

    • 主键索引:唯一且非空。
    • 唯一索引:字段值唯一,但可为空。
    • 组合索引:多个字段组合。
    • 全文索引:适用于 CHARVARCHARTEXT 类型字段。
    • 普通索引:字段可以为空。
  • 索引的设计原则

    • 对经常查询的字段建立索引。
    • 避免对区分度低的字段建立索引。
    • 使用短索引,减少磁盘读取时间。
  • 存储引擎

    MySQL 提供四种存储引擎:

  • InnoDB:默认事务存储引擎,支持行级锁和外键。
  • MyISAM:适用于只读或小数据量的场景。
  • MEMORY:数据存储在内存中,速度快但易失数据。
  • ARCHIVE:适合存储大量历史数据,性能较低。
  • MyISAM 和 InnoDB 的区别

    • 存储结构:MyISAM 存储在多个文件中,而 InnoDB 存储在单个文件中。
    • 事务支持:InnoDB 支持事务,MyISAM 不支持。
    • 锁机制:InnoDB 支持行级锁,MyISAM 只支持表级锁。
    • 恢复能力:InnoDB 支持崩溃恢复,MyISAM 不支持。

    锁机制

    • 按粒度分类:行级锁、表级锁、页级锁。
    • 按级别分类:共享锁、排他锁、意向锁。
    • 乐观锁:通过版本号机制控制并发。
    • 悲观锁:通过加锁机制控制并发。

    MVCC 实现原理

    MVCC(多版本并发控制)通过版本链和快照读实现并发控制。

    • 版本链:记录数据修改的历史版本。
    • 快照读:读取数据的快照版本,避免幻读。
    • 读写分离:提升并发性能。

    分库分表优化

    • 垂直划分:根据业务功能拆分数据库。
    • 水平划分:根据数据分布规则拆分表。
    • 分区表:通过分区实现物理存储和逻辑存储的结合。

    查询优化

    • 查询执行流程:权限校验、查询缓存、分析器、优化器、执行器。
    • 分页优化:通过分页技术提高性能。
    • 大表查询优化:通过索引和分区技术降低查询压力。

    其他 MySQL 功能

    • 主从同步:支持数据复制和高并发操作。
    • 触发器:自动执行数据库事件。
    • 存储过程和函数:扩展数据库功能。
    • 二进制日志:记录数据库操作,支持数据恢复和复制。

    以上是对 MySQL数据库基础知识的系统总结,涵盖了从基础到高级功能的内容。

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

    你可能感兴趣的文章
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>
    Mysql 笔记
    查看>>
    MySQL 精选 60 道面试题(含答案)
    查看>>
    mysql 索引
    查看>>