从一条 SQL 到三个原则:MySQL 心智模型

刚开始学 MySQL 时,初学者可能会有一种感受:

简单的 SELECTINSERT 好像不难,可一旦继续往下学,B+ 树、聚簇索引、MVCC、间隙锁、redo log、binlog 等名词就会一起冒出来。每个词单独看似乎都能理解,合在一起却不知道它们到底有什么关系。

问题通常不是你记得不够多,而是脑中还没有一张地图。

如果不知道 MySQL 整体在解决什么问题,知识点就只能散落在脑海里;一旦先建立了心智模型,后面再遇到新概念,就能知道它应该挂在哪个位置。

会写几条 SQL,只代表我们学会了向数据库提要求;要真正理解 MySQL,还需要看清这些要求背后的处理过程。

这篇文章不会把所有机制一次讲完,而是先搭一副骨架。读完后,你应该能够回答三个问题:

  1. MySQL 到底是什么?
  2. 一条 SQL 进入 MySQL 后会经历什么?
  3. 索引、事务、锁和日志分别在解决什么问题?

一、先用一句话说清 MySQL

MySQL 是一个可靠的结构化数据仓库 :我们把数据放进具有固定列结构的表中,用 SQL 描述自己想要什么,MySQL 负责把结果找出来,并尽量保证数据查得快、改得对、不丢失

例如,下面是一张用户表:

id name age
1 小林 20
2 小周 23

我们不需要告诉 MySQL 应该先翻哪一页、再检查哪一行,只需要声明目标:

sql 复制代码
SELECT name
FROM users
WHERE id = 2;

这就是 SQL 和普通编程语言一个很明显的区别。SQL 更关心"我要什么",而不是逐步描述"应该怎么找"。

至于从哪里找、选择哪条路径、怎样减少磁盘读取,是 MySQL 自己要处理的事情。

重点:

学习 MySQL 时,不要只盯着 SQL 语法。SQL 是我们递交给数据库的需求,MySQL 内部如何安全、高效地完成需求,才是索引、事务、锁和日志存在的原因。

二、把 MySQL 想成一座图书馆

数据库里的很多抽象概念,都可以先用图书馆来理解。

  • 一张像一组存放同类图书的书架;
  • 行数据像书架上的一本书;
  • 每本书的不同属性,例如书名、作者和出版时间,就像表中的不同
  • 主键像一本书独一无二的索书号。

如果图书都按照索书号排列,管理员就不需要从第一本开始逐本翻找。通过有序的目录,可以快速缩小范围。这就是理解索引的起点。

但读者不一定知道索书号。他可能只知道书名或作者,于是图书馆还会准备另一套检索卡片:卡片按照书名或作者排列,同时记录对应的索书号。

先查检索卡片,得到索书号,再去主书架取出完整图书,这个过程就很像 InnoDB 中通过二级索引 找到主键,再根据主键获取整行数据。后面这一步通常叫作回表

二级索引像一套额外的检索卡片:它帮助我们找到主键,再由主键定位完整数据。

这个类比不可能覆盖数据库的全部细节,但它提供了一个重要认识:

索引不是凭空让查询变快的魔法,而是额外维护一份适合查找的有序结构,用空间和写入成本换取查询速度。

索引越多,查询不一定越慢,但新增和修改数据时,MySQL 需要同步维护的结构会更多。因此,"给所有列都加索引"并不是正确的优化原则。

三、一条 SQL 在 MySQL 中经历了什么

现在把视角从数据如何摆放,移动到一条 SQL 如何被执行。

可以把 MySQL 粗略分成两层:

  • Server 层负责连接、解析 SQL、选择执行方案以及调度执行;
  • 存储引擎层负责真正保存和读取数据,并提供事务等能力。

InnoDB 是当前 MySQL 最常用的存储引擎。平时谈到聚簇索引、行锁、MVCC 和 redo log,大多都与 InnoDB 有关。

一条查询大致会经过下面几步:
#mermaid-svg-ZWtHHhaRY1LlClsw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZWtHHhaRY1LlClsw .error-icon{fill:#552222;}#mermaid-svg-ZWtHHhaRY1LlClsw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZWtHHhaRY1LlClsw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZWtHHhaRY1LlClsw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZWtHHhaRY1LlClsw .marker.cross{stroke:#333333;}#mermaid-svg-ZWtHHhaRY1LlClsw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZWtHHhaRY1LlClsw p{margin:0;}#mermaid-svg-ZWtHHhaRY1LlClsw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster-label text{fill:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster-label span{color:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster-label span p{background-color:transparent;}#mermaid-svg-ZWtHHhaRY1LlClsw .label text,#mermaid-svg-ZWtHHhaRY1LlClsw span{fill:#333;color:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw .node rect,#mermaid-svg-ZWtHHhaRY1LlClsw .node circle,#mermaid-svg-ZWtHHhaRY1LlClsw .node ellipse,#mermaid-svg-ZWtHHhaRY1LlClsw .node polygon,#mermaid-svg-ZWtHHhaRY1LlClsw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZWtHHhaRY1LlClsw .rough-node .label text,#mermaid-svg-ZWtHHhaRY1LlClsw .node .label text,#mermaid-svg-ZWtHHhaRY1LlClsw .image-shape .label,#mermaid-svg-ZWtHHhaRY1LlClsw .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZWtHHhaRY1LlClsw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZWtHHhaRY1LlClsw .rough-node .label,#mermaid-svg-ZWtHHhaRY1LlClsw .node .label,#mermaid-svg-ZWtHHhaRY1LlClsw .image-shape .label,#mermaid-svg-ZWtHHhaRY1LlClsw .icon-shape .label{text-align:center;}#mermaid-svg-ZWtHHhaRY1LlClsw .node.clickable{cursor:pointer;}#mermaid-svg-ZWtHHhaRY1LlClsw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZWtHHhaRY1LlClsw .arrowheadPath{fill:#333333;}#mermaid-svg-ZWtHHhaRY1LlClsw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZWtHHhaRY1LlClsw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZWtHHhaRY1LlClsw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZWtHHhaRY1LlClsw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZWtHHhaRY1LlClsw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZWtHHhaRY1LlClsw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster text{fill:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw .cluster span{color:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZWtHHhaRY1LlClsw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZWtHHhaRY1LlClsw rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZWtHHhaRY1LlClsw .icon-shape,#mermaid-svg-ZWtHHhaRY1LlClsw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZWtHHhaRY1LlClsw .icon-shape p,#mermaid-svg-ZWtHHhaRY1LlClsw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZWtHHhaRY1LlClsw .icon-shape .label rect,#mermaid-svg-ZWtHHhaRY1LlClsw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZWtHHhaRY1LlClsw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZWtHHhaRY1LlClsw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZWtHHhaRY1LlClsw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 客户端连接
解析 SQL
优化器选择执行方案
执行器调用 InnoDB
读取数据并返回结果

1. 连接

客户端先与 MySQL 建立连接,完成身份验证并获得相应权限。连接就像进入图书馆前先办理或检查借阅证。

2. 解析

解析器检查 SQL 的结构,理解你要查询哪张表、使用哪些条件。如果语句本身写错了,例如关键字缺失,通常会在这里被发现。

3. 优化

同一个查询可能有多种执行方式:走哪个索引、先访问哪张表、是否需要排序,都可能影响成本。

优化器会根据统计信息估算不同方案的代价,再选择它认为更合适的一条。需要注意,它选择的是估算出的较优方案,并不是永远正确的"全局最优解"。

4. 执行

执行器按照选定的方案工作,并调用 InnoDB 提供的接口读取或修改数据,最后将结果返回给客户端。

可以把 SQL 看成一份需求:先被接收和理解,再选择路线,最后由存储引擎真正取得数据。

理解这条主线后,EXPLAIN 也就不再是一张神秘表格。它只是让我们观察:优化器最后准备走哪条路、使用哪个索引、预计检查多少行。

四、MySQL 要兑现的三个原则

一条 SQL 能够执行,只说明系统"可以工作"。真正困难的是:数据量越来越大、很多人同时访问、机器还可能突然宕机时,它依然要尽可能可靠。

MySQL 的大量核心机制,其实都围绕三个原则展开。

原则一:查得快

假设用户表只有十行,从头检查到尾没有什么问题。但当表中有一千万行数据时,每次查询都扫描整张表,代价就会变得非常高。

索引的任务,就是帮助 MySQL 尽快缩小查找范围。

InnoDB 的索引通常使用 B+ 树组织。现在不必急着背它的每个性质,只需要先抓住核心:它把数据按规则组织成多层有序结构,让 MySQL 不必逐行碰运气。

围绕"查得快",后面会继续遇到这些概念:

  • 聚簇索引与二级索引;
  • 回表与覆盖索引;
  • 联合索引与最左前缀;
  • 索引失效;
  • EXPLAIN 执行计划。

它们都在回答同一个问题:MySQL 怎样用更小的代价找到目标数据?

原则二:改得对

考虑一次转账:

sql 复制代码
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;

UPDATE accounts
SET balance = balance + 100
WHERE id = 2;

这两步应该被看作一个整体。如果钱已经从账户 1 扣除,系统却在给账户 2 加钱之前失败,数据就会处于错误状态。

事务负责划定这个整体:一组操作要么全部成功,要么在失败时撤销。

问题还不止如此。真实系统中,多个请求可能同时读取和修改同一批数据。如果所有人都随意操作,很容易出现覆盖、前后读取结果不一致等问题。

这时需要两类机制协作:

  • MVCC保留数据的历史版本,让许多普通读取不必因为写入而一直等待;
  • 在确实存在修改冲突时建立秩序,让不应该同时进行的操作排队。

MVCC 和锁不是互相取代的关系。可以先把它们理解为:MVCC 尽量让读写并行,锁负责处理无法回避的冲突。

原则三:不丢数据

即使并发控制完全正确,机器也可能在提交数据后突然断电。MySQL 需要知道已经做过什么,以及如何把系统恢复到正确状态。

这就是日志系统存在的意义。初学阶段,先记住三种日志的核心分工:

日志 主要作用
redo log 记录数据页的修改,用于崩溃恢复
undo log 保存修改前的信息,用于回滚和 MVCC 版本读取
binlog 记录数据库变更,用于复制和归档恢复

它们名字相似,职责却不相同。redo log 关心系统崩溃后怎样恢复已经提交的修改;undo log 关心怎样撤销操作、怎样看到旧版本;binlog 则站在数据库变更记录的角度,为主从复制和数据恢复提供基础。

快速找到目标、让并发操作保持秩序、在故障后恢复现场,构成了理解 MySQL 核心机制的三根支柱。

现在可以把整张地图合起来:
#mermaid-svg-Q8zbsoUq0oZN0dwI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Q8zbsoUq0oZN0dwI .error-icon{fill:#552222;}#mermaid-svg-Q8zbsoUq0oZN0dwI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Q8zbsoUq0oZN0dwI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .marker.cross{stroke:#333333;}#mermaid-svg-Q8zbsoUq0oZN0dwI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Q8zbsoUq0oZN0dwI p{margin:0;}#mermaid-svg-Q8zbsoUq0oZN0dwI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster-label text{fill:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster-label span{color:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster-label span p{background-color:transparent;}#mermaid-svg-Q8zbsoUq0oZN0dwI .label text,#mermaid-svg-Q8zbsoUq0oZN0dwI span{fill:#333;color:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .node rect,#mermaid-svg-Q8zbsoUq0oZN0dwI .node circle,#mermaid-svg-Q8zbsoUq0oZN0dwI .node ellipse,#mermaid-svg-Q8zbsoUq0oZN0dwI .node polygon,#mermaid-svg-Q8zbsoUq0oZN0dwI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .rough-node .label text,#mermaid-svg-Q8zbsoUq0oZN0dwI .node .label text,#mermaid-svg-Q8zbsoUq0oZN0dwI .image-shape .label,#mermaid-svg-Q8zbsoUq0oZN0dwI .icon-shape .label{text-anchor:middle;}#mermaid-svg-Q8zbsoUq0oZN0dwI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .rough-node .label,#mermaid-svg-Q8zbsoUq0oZN0dwI .node .label,#mermaid-svg-Q8zbsoUq0oZN0dwI .image-shape .label,#mermaid-svg-Q8zbsoUq0oZN0dwI .icon-shape .label{text-align:center;}#mermaid-svg-Q8zbsoUq0oZN0dwI .node.clickable{cursor:pointer;}#mermaid-svg-Q8zbsoUq0oZN0dwI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .arrowheadPath{fill:#333333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q8zbsoUq0oZN0dwI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Q8zbsoUq0oZN0dwI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q8zbsoUq0oZN0dwI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster text{fill:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI .cluster span{color:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Q8zbsoUq0oZN0dwI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Q8zbsoUq0oZN0dwI rect.text{fill:none;stroke-width:0;}#mermaid-svg-Q8zbsoUq0oZN0dwI .icon-shape,#mermaid-svg-Q8zbsoUq0oZN0dwI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Q8zbsoUq0oZN0dwI .icon-shape p,#mermaid-svg-Q8zbsoUq0oZN0dwI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Q8zbsoUq0oZN0dwI .icon-shape .label rect,#mermaid-svg-Q8zbsoUq0oZN0dwI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Q8zbsoUq0oZN0dwI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Q8zbsoUq0oZN0dwI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Q8zbsoUq0oZN0dwI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 一条 SQL
连接 → 解析 → 优化 → 执行
InnoDB 存取数据
查得快

索引与执行计划
改得对

事务、MVCC 与锁
不丢数据

redo、undo 与 binlog

以后再遇到陌生术语,可以先不要急着背定义,而是问自己:

  • 它是在帮助查询更快吗?
  • 它是在协调并发修改吗?
  • 它是在支持回滚、恢复或复制吗?
  • 它处于一条 SQL 执行过程的哪个位置?

只要能把概念挂回这张图,知识就不会继续散落。

五、初学者应该按照什么顺序学习

MySQL 的知识很多,但不需要同时展开。比较顺畅的学习路线可以分成四个阶段。

第一阶段:打好地基

先掌握库、表、行、列、主键、常见数据类型和基本 CRUD,再理解 Server 层与存储引擎的分工,以及一条 SQL 的执行流程。

这个阶段的目标不是背面试题,而是能建立表、写查询,并知道自己的 SQL 被谁处理。

第二阶段:理解核心机制

按照下面的依赖顺序学习:

  • 索引 → EXPLAIN
  • 事务 → 隔离级别 → MVCC → 锁;
  • 最后用日志系统把回滚、恢复和复制串起来。

先懂索引,才看得懂执行计划;先知道并发读写会产生什么问题,才知道 MVCC 和锁为什么存在。

第三阶段:学习优化与设计

当你理解 MySQL 怎样执行 SQL 后,再学习慢查询定位、分页和排序优化、数据类型选择以及表结构设计。此时很多"优化原则"不再需要死记,因为你能推断它为什么有效。

第四阶段:了解规模化问题

最后再接触主从复制、读写分离和分库分表。这些方案用于解决更大的数据量和可用性问题,同时也会带来主从延迟、分布式事务和跨库查询等新成本。

六、用几个问题检查自己是否真的理解

读完这篇文章,可以尝试不看原文回答:

  1. SQL 为什么只写"要什么",却能得到结果?
  2. Server 层和 InnoDB 大致分别负责什么?
  3. 二级索引为什么可能需要回表?
  4. 事务、MVCC 和锁为什么要一起出现?
  5. redo log、undo log 和 binlog 的主要分工是什么?

如果暂时答不完整也没关系。重要的是,你已经知道答案应该去整张地图的哪个区域寻找。

写在最后

初学 MySQL 最容易走进的误区,是把它学成一份越来越长的术语表。

其实,无论是 B+ 树、覆盖索引、ReadView、临键锁,还是两阶段提交,它们都不是孤立设计。它们只是 MySQL 为了完成一条条数据请求,同时兑现三个原则而采用的不同机制:

  • 索引让数据查得快
  • 事务、MVCC 和锁让数据改得对
  • redo、undo 和 binlog 让数据尽量不丢失

先记住这副骨架,再逐个补充细节。等每个知识点都有了位置,你会发现,MySQL 并没有看起来那么杂乱。

相关推荐
Mico184 小时前
MySQL 8.0.35 GTID主从复制常见管理操作
mysql
网安墨雨5 小时前
MySQL数据库 SQL语句详解
自动化测试·软件测试·数据库·python·sql·mysql
muddjsv5 小时前
SQLite与MySQL/PostgreSQL本质区别:运行模型、并发、部署、权限全方位对比
mysql·postgresql·sqlite
一个天蝎座 白勺 程序猿8 小时前
复盘之我在金仓生产环境踩过的SQL暗坑,和攒了六年的编码规矩
数据库·sql·kingbasees
Mico188 小时前
MySQL 8.0.35 GTID + 延迟复制 + 过滤复制搭建
mysql·dba
会编程的土豆9 小时前
结构体 struct:用代码描述用户、订单、座位
数据库·mysql·golang
瞬间&永恒~1 天前
【MySQL】4-6:在同一个主机上使用 systemd 运行多个 MySQL服务器
服务器·数据库·mysql