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

MySQL后端开发核心知识点

一、存储引擎(只重点 InnoDB)

  1. MySQL 5.5 以后默认引擎是InnoDB,也是现代企业项目唯一使用的引擎。
  2. InnoDB 特点:
    • 支持事务
    • 支持行级锁,并发性能好
    • 支持外键(实际开发基本不用)
    • 基于B+ 树索引结构
    • 依靠MVCC 实现无锁并发读写
  3. MyISAM 不支持事务和行锁,并发差,已基本淘汰。
  4. InnoDB引擎中事务原理:redo log重做日志,记录做了什么修改,实现事务的持久性WAL(write-ahead-logging):先写日志再写磁盘,事务提交只需写redo log(顺序IO,极快),在刷盘时出现错误可进行数据恢复
  5. undo log回滚日志,记录数据被修改前的信息,当执行回滚时,可以从undo log中的逻辑记录读取相应的内容并进行回滚,保证原子性
  6. 开始事务 【1】生成 Undo Log(保存旧数据,用来回滚) 【2】修改内存中的数据页(还没写磁盘) 【3】写入 Redo Log(WAL 原则:先写日志) 【4】提交事务(commit) 【5】后台慢慢把内存数据刷到磁盘(随机IO)

二、索引(重中之重)

  1. 索引是提高查询效率的数据结构,InnoDB 使用B+ 树
  2. 常见索引类型:
    • 主键索引(PRIMARY KEY)
    • 普通索引(INDEX)
    • 唯一索引(UNIQUE)
    • 联合索引(多字段组合)
  3. 最左前缀原则
    • 联合索引(a,b,c),能命中:aa,ba,b,c
    • 跳过前面字段,无法命中整个索引
  4. 索引失效常见场景:
    • where字段使用函数、运算
    • 模糊查询%前缀,前缀不能模糊
    • 类型隐式转换,字符串要加' '
    • 全表扫描比索引更快时,优化器会放弃索引
    • or连接有一个字段没索引
    • 违反最左前缀原则

三、EXPLAIN 执行计划

  1. 用于查看 MySQL如何执行 SQL,是否使用索引。
  2. 重点看这几列:
    • type:索引查询效率,system > const > ref > range > index > ALL
      • 至少要达到range / ref,ALL 代表全表扫描,需要优化
    • key:实际命中的索引
    • rows:扫描行数,越小越好
    • Extra:额外信息,如Using indexUsing filesort
  3. 作用:
    • 判断 SQL 是否走索引
    • 定位慢查询原因
    • 优化联合索引、查询语句

四、事务与 ACID

  1. 事务是一组不可分割的 SQL,要么全部成功,要么全部失败
  2. ACID 四大特性:
    • 原子性(Atomicity):不可分割
    • 一致性(Consistency):执行前后数据合法
    • 隔离性(Isolation):事务之间互不干扰
    • 持久性(Durability):提交后永久生效
  3. Undo Log → 保证原子性(Atomicity)Redo Log → 保证持久性(Durability)MVCC + 锁 → 保证隔离性(Isolation)日志 + 锁 + 刷盘 → 保证一致性(Consistency)

五、事务隔离级别

  1. 读未提交(READ UNCOMMITTED)
    • 会出现脏读、不可重复读、幻读
  2. 读已提交(READ COMMITTED,Oracle 默认)
    • 解决脏读
  3. 可重复读(REPEATABLE READ,MySQL 默认)
    • 解决脏读、不可重复读
    • 通过间隙锁 + MVCC解决幻读
  4. 串行化(SERIALIZABLE)
    • 最高级别,无并发问题,性能最差

企业开发常用:READ COMMITTED 或 REPEATABLE READ


六、MySQL 锁机制

  1. InnoDB 主要使用行锁,MyISAM 只支持表锁。
  2. 行锁是加在索引上的,不是加在数据行上。
  3. 如果查询没有命中索引,行锁会退化为全表加行锁,并发极低。
  4. 间隙锁=锁索引之间的空隙,RR级别生效,专门防止范围查询时出现幻读;(a,b)
  5. 间隙锁(GAP 锁)+ 行锁 = 临键锁 类似:(a,b]
    • 作用:在RR 隔离级别解决幻读
  6. 记录锁:锁单行,防修改。
  7. 间隙锁:锁空隙,防插入。
  8. 临键锁:锁区间 + 记录,RR 默认,彻底解决幻读。
  9. Java 后端开发不需要手动加锁,只需要:
    • 合理建索引
    • 避免无索引更新
    • 避免长事务

七、MVCC 多版本并发控制

  1. MVCC 是 InnoDB 实现高并发、无锁读写的核心机制。
  2. 基本思想:
    • 每行数据保存多个版本
    • 读不加锁,写加锁,读写不阻塞
  3. 依靠:
    • undo log 版本链
    • readView可见性判断; 在RR级别仅在事务中第一次指向快照读时生成readView,后续复用 在RC级别每次执行快照读时都生成新的readView
    • 隐藏字段1DB_TRX_ID:记录生成这行数据的事务ID,判断这个版本是谁改的、是否可见2DB_ROLL_PTR: 回滚指针,指向undo log里的上一个历史版本,靠他串联版本 3)DB_ROW_ID: 隐藏主键,表没有主键时就用这个当主键(了解为主)
  4. 实现效果:
    • 快照读(普通 select)无锁
    • 当前读(select for update /update/insert)加锁

八、开发与面试总结

  1. 业务开发只需要掌握:
    • 正确建表、建索引
    • 能用 EXPLAIN 分析 SQL
    • 理解事务与隔离级别
    • 知道行锁与索引的关系
    • 了解 MVCC 思想:读不加锁写加锁,读写互不阻塞,既保证事务隔离又提升并发性能
  2. 存储过程、触发器、函数、视图、运维等高阶内容,Java 后端基本不用
  3. 把逻辑写在 Java 代码中,数据库只做存储,是现代企业标准规范。
  4. Redo Log(InnoDB)→ 崩溃恢复,保证不丢数据Binlog(Server)→ 主从库复制、数据恢复,保证数据能复制、能回滚Undo Log(InnoDB)→ 回滚 + MVCC,保证原子性、多版本

http://www.jsqmd.com/news/594737/

相关文章:

  • 半导体行业展会推荐怎么选?半导体展会全产业链盛会甄选 - 品牌2026
  • 别再只调RGB了!用HSV给你的WS2812灯带调出更自然的彩虹渐变(附Arduino代码)
  • 一篇顶一万篇,很难找到代码这么全的高分文章,WGS、RNA-seq、scRNA-seq、免疫肽组质谱联合分析
  • 从“单模型黑箱”到“多智能体博弈”:PediaMind 架构选型与核心优势解析
  • 科研党福音:OpenClaw+千问3.5-27B自动整理参考文献
  • STM8S001单片机:8引脚高性价比嵌入式开发方案
  • 在kali上创建DVWA靶机实验
  • 高效制作IO通道测试表:从位号表到VLOOKUP函数实战
  • 作品被篡改署名?三步维权指南
  • 全栈开发者工具链:OpenClaw+Qwen3.5-9B-AWQ-4bit辅助前端调试
  • OpenClaw隐私保护方案:Qwen3.5-9B本地化替代云端AI服务
  • 你的ESP32项目还缺个BGM?手把手教你做个可切换歌单的迷你音乐播放器
  • 蓝桥杯一周突破---day1【贪心】
  • 解构 Claude Code 的“上下文经济学”
  • 手把手用Multisim仿真BJT三种工作模式:从截止区到饱和区的实战观察
  • OpenClaw多模型协作方案:Qwen2.5-VL-7B与纯文本模型任务分工实践
  • RK3588上跑通YOLOv5实时检测:从摄像头编号获取到Python脚本调试的全流程实录
  • Python高效处理字符串去重的5种实用技巧
  • 如何分析AWR中的SGA建议_Buffer Cache Advisory与内存扩容指导
  • 房产线上获客平台究竟有多牛?
  • OpenClaw配置备份:千问3.5-9B环境快速迁移方案
  • Java学习笔记_Day21(Set)
  • OpenClaw故障排查大全:Qwen3.5-9B-AWQ-4bit接入常见报错解决
  • OpenClaw创意生成:用Qwen2.5-VL-7B自动设计社交媒体海报
  • 30分钟搭建个人AI助手:OpenClaw+千问3.5-35B-A3B-FP8极速体验
  • OpenClaw备份策略:千问3.5-35B-A3B-FP8自动化数据同步方案
  • 大模型优化:CUDA调度波次(Wave)中的负载均衡与资源利用
  • TimerThree硬件定时器库:16位定时器跨平台实战指南
  • 应急响应靶机练习-Web2
  • 2026年比较好的工业机器人位移传感器厂家精选合集 - 品牌宣传支持者