博客
关于我
MySQL高频面试题
阅读量:803 次
发布时间: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/

    你可能感兴趣的文章
    Spring security之管理session
    查看>>
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
    查看>>
    Parrot OS 6.3 发布!全面提升安全性,新增先进工具,带来更高性能
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34
    查看>>
    Spring Boot中的自定义事件详解与实战
    查看>>
    Passport 密码模式
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passport 简易搭配
    查看>>
    passwd命令限制用户密码到期时间
    查看>>
    Spring Boot 动态加载jar包,动态配置太强了!
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT (Basic Level) Practice 乙级1021-1030
    查看>>
    PAT (Basic Level) Practice 乙级1031-1040
    查看>>