当前位置: 首页 > news >正文

MySQL 数据库核心知识点详解

MySQL 数据库核心知识点详解

一、数据库基础知识

1. 数据库的三大范式

  • 第一范式(1NF):属性不可再分,确保每列都是原子的。
  • 第二范式(2NF):在1NF基础上,消除非主属性对码的部分函数依赖。
  • 第三范式(3NF):在2NF基础上,消除非主属性对码的传递函数依赖。

2. 主键与外键的区别

  • 主键:唯一标识一条记录,不可重复、不可为空,一个表只能有一个主键。
  • 外键:用于建立表间关联,引用另一表的主键,可重复、可为空,一个表可有多个外键。

3. 外键与级联的争议

  • 不推荐使用原因
    • 增加复杂性,影响更新和删除操作。
    • 维护成本高,不利于分库分表。
  • 优点:保证数据一致性和完整性,简化业务逻辑。

4. 存储过程

  • 预编译的SQL语句集合,包含业务逻辑。
  • 优点:执行效率高,复用性强。
  • 缺点:难以调试、移植性差,阿里规范禁止使用。

5. DROP、DELETE、TRUNCATE的区别

操作类型功能速度
DROPDDL删除表结构和数据最快
TRUNCATEDDL删除数据,保留结构中等
DELETEDML删除指定行,可回滚最慢

二、MySQL基础

1. 关系型数据库

  • 基于关系模型,支持一对一、一对多、多对多关系。
  • 提供完整性约束(如主键、外键、唯一性等)。

2. SQL与NoSQL对比

特性SQL(关系型)NoSQL(非关系型)
数据结构表结构,严格约束灵活(文档、键值、图等)
事务支持强一致性(ACID)最终一致性或弱一致性
查询语言标准SQL无统一语言
存储方式磁盘内存或磁盘

3. 视图

  • 虚拟表,基于一个或多个实际表生成。
  • 支持CRUD操作,不影响底层表结构。

4. 连接类型

  • 内连接:只返回匹配的记录。
  • 左外连接:返回左表全部记录,右表不匹配为NULL。
  • 右外连接:返回右表全部记录,左表不匹配为NULL。

三、MySQL字段类型

1. 常用类型

  • 数值型:INT、BIGINT、FLOAT、DOUBLE、DECIMAL
  • 字符串型:CHAR、VARCHAR
  • 日期时间型:DATE、DATETIME

2. CHAR vs VARCHAR

  • CHAR:定长,适合长度固定的字段(如身份证、订单号)。
  • VARCHAR:变长,适合长度不定的字段(如用户名、标题)。

3. DECIMAL vs FLOAT/DOUBLE

  • DECIMAL:精确小数,适合金额等精度要求高的场景。
  • FLOAT/DOUBLE:近似值,计算快但存在精度损失。

4. NULL vs 空字符串

  • NULL:表示未知值,不占存储空间(但指针占空间),聚合函数忽略。
  • 空字符串:长度为0的字符串,占存储空间。

四、MySQL存储引擎

1. 常见引擎对比

引擎事务支持外键支持锁机制适用场景
InnoDB支持支持行级锁高并发、事务操作
MyISAM不支持不支持表级锁读多写少

2. InnoDB与MyISAM的COUNT(*)差异

  • MyISAM:内置计数器,直接返回结果。
  • InnoDB:实时统计,需全表扫描。

五、MySQL索引

1. 索引概述

  • 索引是排好序的数据结构,用于加速查询。
  • MySQL默认使用B+树作为索引结构。

2. 索引类型

  • 主键索引:唯一、非空。
  • 唯一索引:唯一、可空。
  • 普通索引:无限制。
  • 全文索引:用于文本检索。

3. 索引优缺点

  • 优点:加快查询速度,保证唯一性。
  • 缺点:占用空间,降低写操作性能。

4. 索引失效场景

  • 使用LIKE '%xx'模糊查询。
  • 对索引列使用函数或表达式。
  • OR条件中非索引列参与。
  • 违反最左前缀原则。

5. 最左前缀原则

  • 联合索引必须从最左列开始匹配,否则索引失效。

六、MySQL日志

1. 常见日志类型

  • Undo Log:用于事务回滚和MVCC。
  • Redo Log:保证事务持久性,宕机后恢复数据。
  • Bin Log:用于数据备份和主从同步。
  • 慢查询日志:记录执行时间超阈值的SQL。

2. Redo Log与持久性

  • 事务提交时,Redo Log按策略刷盘,确保数据不丢失。

3. Undo Log与原子性

  • 记录事务修改前的状态,用于回滚操作。

七、MySQL事务

1. 事务特性(ACID)

  • 原子性:全部成功或全部失败。
  • 一致性:事务前后数据状态合法。
  • 隔离性:并发事务互不干扰。
  • 持久性:事务提交后数据永久保存。

2. 并发问题

  • 脏读、不可重复读、幻读、丢失修改。

3. 隔离级别

级别脏读不可重复读幻读
读未提交
读已提交
可重复读
串行化

MySQL默认隔离级别:可重复读

4. MVCC(多版本并发控制)

  • 通过Undo Log链和ReadView实现非锁定读。
  • 解决脏读、不可重复读,减少幻读。

八、MySQL锁

1. 锁分类

  • 按粒度
    • 表级锁:锁定整表,并发低。
    • 行级锁:锁定单行,并发高。
  • 按行为
    • 共享锁(读锁):允许多个读,禁止写。
    • 排他锁(写锁):禁止其他任何操作。

2. 意向锁

  • 用于快速判断表是否被锁定,避免逐行检查。

3. 悲观锁 vs 乐观锁

类型加锁时机实现方式适用场景
悲观锁访问前加锁阻塞等待高并发竞争
乐观锁更新时检查版本号或CAS低并发竞争

4. 避免死锁

  • 设置锁超时时间。
  • 按固定顺序访问资源。
  • 避免长事务。

九、MySQL性能优化

1. SQL优化手段

  • 索引优化:合理添加索引,避免频繁更新字段加索引。
  • 避免全表扫描:避免对索引列使用函数、NOT IN等。
  • 查询优化
    • 使用SELECT 字段代替SELECT *
    • 使用JOIN代替子查询
    • 使用EXISTS代替IN
  • 分库分表:数据量大时水平或垂直拆分。
  • 批量操作:减少单条SQL执行次数。

2. EXPLAIN命令

  • 分析SQL执行计划,判断是否走索引、是否存在全表扫描等。

3. 慢查询排查步骤

  1. 使用EXPLAIN分析执行计划。
  2. 检查是否使用索引。
  3. 优化查询语句,避免复杂子查询。
  4. 考虑分页、缓存等手段。

十、数据库缓存

1. 缓存的作用

  • 将频繁访问的数据存入内存,减少磁盘I/O,提升查询速度。

2. MySQL缓存机制

  • 查询缓存(Query Cache)
    • 缓存SELECT语句及其结果集。
    • 表更新后缓存失效。
    • MySQL 8.0已移除。
  • InnoDB缓冲池(Buffer Pool)
    • 缓存数据页和索引页。
    • 通过LRU算法管理内存。

3. 应用层缓存

  • Redis/Memcached
    • 作为外部缓存,存储热点数据。
    • 减轻数据库压力,提升并发能力。

4. 缓存更新策略

  • Cache-Aside:先查缓存,未命中则查数据库并写入缓存。
  • Write-Through:同时更新缓存和数据库。
  • Write-Behind:先更新缓存,异步更新数据库。

5. 缓存穿透、击穿、雪崩

  • 穿透:查询不存在的数据,绕过缓存。
    • 解决方案:布隆过滤器、空值缓存。
  • 击穿:热点数据过期瞬间大量请求直达数据库。
    • 解决方案:互斥锁、永不过期策略。
  • 雪崩:大量缓存同时失效,请求压垮数据库。
    • 解决方案:设置随机过期时间、集群部署。

总结

MySQL作为最常用的关系型数据库之一,其核心知识点包括数据建模、索引优化、事务处理、锁机制、日志系统与性能调优等。合理使用缓存机制(如缓冲池、外部缓存)能显著提升系统性能。在实际开发中,应结合业务场景选择合适的存储引擎、索引策略和缓存方案,以达到高性能、高可用的目标。

本文基于MySQL 5.7/8.0 版本整理,部分特性可能随版本更新而变化。

http://www.dtcms.com/a/395512.html

相关文章:

  • 让机器人边思考边行动!新一代具身智能EO-1:统一架构突破VLA瓶颈
  • 数据库笔试选择题:题组1
  • 一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?
  • 德克西尔井盖异动传感器:城市安全的隐形守护者
  • HTML基本标签一
  • BGP高防服务器具体是指什么
  • 打工人日报#20250922
  • Django视图与路由
  • 在thinkphp8的模板文件中 如何调用公共服务类函数
  • Nextcloud增加模块内嵌网页
  • Ubuntu18.04 MySQL5.7.42 内存升高导致OOM MySQL重启解决办法
  • html调起exe程序
  • C#中的Task怎么理解,理解异步编程的核心
  • fastApi框架开发一个web端仓库管理系统
  • mosquitto求医之路(3):Docker安装也不好使
  • 字节 TRAE:AI 原生 Coding Agent 的工程化架构与实战落地
  • 保姆级教程:windows和linux双系统的电脑如何无副作用,安全删除linux
  • SSM宠物领养平台16e63(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 大前端系统课教程(视频教程)
  • Bulutistan:融合本地与云端,借 Azure Arc 开启创新之旅
  • 北极象沉浸式翻译 - 沉浸式翻译 | 免费翻译 | PDF翻译
  • C++编码
  • WKT、WKB和GeoJson
  • 【开题答辩全过程】以 基于大数据的混合音乐推荐系统为例,包含答辩的问题和答案
  • 【complex system science 4 precision medicine】
  • (4) Tauri调试
  • destr错误
  • 数据定义:数字化控制系统技术分析-2
  • pyhon接口自动化的一些编码规范
  • SimLab Composer下载与安装教程(附安装包)2025最新版详细图文安装教程