这里写自定义目录标题
- [01 · 体系结构与存储引擎](#01 · 体系结构与存储引擎)
-
- 核心知识点
-
- [1. 三层架构](#1. 三层架构)
- [2. 一条 SQL 的执行流程](#2. 一条 SQL 的执行流程)
- [3. InnoDB vs MyISAM](#3. InnoDB vs MyISAM)
- [4. Buffer Pool(性能核心)](#4. Buffer Pool(性能核心))
- [5. 数据页与行格式](#5. 数据页与行格式)
- 高频问答
-
- [Q1. 一条 SQL 语句的执行流程?](#Q1. 一条 SQL 语句的执行流程?)
- [Q2. 为什么 MySQL 默认用 InnoDB?](#Q2. 为什么 MySQL 默认用 InnoDB?)
- [Q3. Buffer Pool 的作用是什么?](#Q3. Buffer Pool 的作用是什么?)
- [Q4. 查询缓存为什么在 8.0 被移除?](#Q4. 查询缓存为什么在 8.0 被移除?)
- [Q5. 为什么建议使用自增主键?](#Q5. 为什么建议使用自增主键?)
- [场景 / 排障](#场景 / 排障)
- 一句话带走
- 欢迎使用Markdown编辑器
01 · 体系结构与存储引擎
面试频率 ★ | MySQL 是「连接层 + Server 层 + 可插拔存储引擎层」的分层架构。InnoDB 赢在事务、行锁和崩溃恢复,所以 5.5 之后成为默认引擎。
核心知识点
1. 三层架构
客户端
│
连接层:连接器(TCP、认证、权限、连接池、线程)
│
Server 层:解析器 → 优化器 → 执行器(+ 内置函数、查询缓存 8.0 已移除)
│
存储引擎层:InnoDB / MyISAM / Memory ......(插件式,按表选择)
│
文件系统:.ibd / .frm(8.0 前) / redo log / binlog
- 连接层 :负责建立连接、认证、权限校验。连接是长连接 ,空闲太久会被
wait_timeout断开;连接数上限是max_connections。 - Server 层 :所有引擎共用的逻辑。解析器做词法/语法分析生成语法树;优化器基于成本模型选择索引、决定 join 顺序;执行器按执行计划调用引擎接口逐行取数。
- 引擎层:真正的数据读写。InnoDB 是默认引擎,支持事务、行锁、外键、崩溃恢复。
2. 一条 SQL 的执行流程
查询:连接器 → 解析器 → 优化器 → 执行器 → 存储引擎 → 返回结果集。
更新 :Server 层流程相同,但 InnoDB 内部还要写 undo log (回滚)和 redo log (持久化),Server 层写 binlog (复制/归档),最后通过两阶段提交保证三者一致。详见 \[MySQL与Redis/MySQL/05 · 日志系统与崩溃恢复\|05 · 日志系统与崩溃恢复]。
3. InnoDB vs MyISAM
| 维度 | InnoDB | MyISAM |
|---|---|---|
| 事务 | ✅ 支持 | ❌ 不支持 |
| 锁粒度 | 行锁 | 表锁 |
| 外键 | ✅ 支持 | ❌ 不支持 |
| 崩溃恢复 | ✅ redo log | ❌ 不保证 |
| 索引结构 | 聚簇索引(叶子存整行) | 非聚簇(叶子存地址) |
| 全文索引 | 5.6+ 支持 | 支持 |
count(*) |
需遍历(走最小索引) | 维护了行数,很快 |
| 适用场景 | OLTP、并发写 | 读多写少、日志/统计类 |
两者索引都是 B+ 树,区别在叶子节点存什么 和有没有事务。
4. Buffer Pool(性能核心)
- 以 16KB 数据页为单位缓存热数据,读写都先操作内存中的页。
- 修改产生脏页,由后台线程按 checkpoint 刷盘;不是每次更新都随机写磁盘。
- LRU 做了改进:分为 young(5/8) 和 old(3/8) 两个区,新页先进 old 区,1 秒内再次被访问才晋升,防止全表扫描把热数据挤掉。
- Change Buffer:缓存「二级索引非唯一页」的写操作,等页被读入时再 merge,减少随机 IO。
- Log Buffer :redo log 先写内存,再按
innodb_flush_log_at_trx_commit刷盘。
5. 数据页与行格式
- 页是 InnoDB 磁盘与内存交互的最小单位(16KB),页内记录用链表组织,页目录加速查找。
- 行格式
DYNAMIC是 5.7+ 默认:变长字段过长时存到溢出页,行内只留 20 字节指针。 - 每行有隐藏列:
DB_TRX_ID(最后修改的事务 ID)、DB_ROLL_PTR(指向 undo 版本链)、DB_ROW_ID(无主键时生成)。 - 没有主键时用
DB_ROW_ID做聚簇索引,无法保证有序,所以建议显式自增主键。
高频问答
Q1. 一条 SQL 语句的执行流程?
速记 › 连接器 → 解析器 → 优化器 → 执行器 → 存储引擎。
展开
- 连接器:建连接、验密码、查权限。
- 解析器:词法/语法分析,生成语法树;语法错误在这一步报。
- 优化器:决定走哪个索引、多表 join 的顺序,生成执行计划。
- 执行器:校验表权限,调用引擎接口逐行读取,把满足条件的行返回客户端。
追问
- 优化器一定会选对索引吗? 不一定,它按统计信息估算成本;统计信息过期或数据分布倾斜时会选错,可用
ANALYZE TABLE更新统计信息,或FORCE INDEX干预。
Q2. 为什么 MySQL 默认用 InnoDB?
速记 › 支持事务、行锁、外键和崩溃恢复,适合 OLTP 的并发读写。
展开
- 事务:保证一组操作要么全成功要么全回滚。
- 行锁:并发写不同行互不阻塞,MyISAM 表锁会互相排队。
- 崩溃恢复:redo log 保证已提交数据不丢。
- 聚簇索引:主键查询直接拿到整行,减少一次寻址。
追问
- MyISAM 还有用吗? 基本没有了;它的优势(
count(*)快、空间小)在现代硬件和 InnoDB 优化面前已不明显。
Q3. Buffer Pool 的作用是什么?
速记 › 把热数据页缓存在内存里,读写不直接打磁盘,是 MySQL 性能的关键。
展开
- 读:命中 Buffer Pool 直接返回;未命中才从磁盘读页并放入。
- 写:先改内存页变成脏页,后台批量刷盘,把随机写变成顺序写。
- LRU 冷热分离 + 1 秒规则:避免一次性全表扫描污染缓存。
追问
- Buffer Pool 越大越好吗? 一般设为物理内存的 50%--70%;太大可能挤占系统内存导致 swap,反而更慢。
Q4. 查询缓存为什么在 8.0 被移除?
速记 › 失效太频繁、命中率低、维护成本高。
展开
- 查询缓存以表为粒度失效:表上任何一行更新,整表缓存全部清空。
- 写多的业务几乎命中不了,还额外增加加锁和内存开销。
- 8.0 直接移除,推荐用 Redis 做应用层缓存。
Q5. 为什么建议使用自增主键?
速记 › 有序插入减少页分裂,主键越短二级索引越小。
展开
- 自增主键按顺序写入,新记录总在最后一页,减少页分裂和碎片。
- 二级索引叶子存的是主键值,主键越长,所有二级索引越大。
- 随机主键(如 UUID)会导致频繁页分裂、缓存命中率下降。
场景 / 排障
现象:表只有几百万行,但查询偶尔很慢。
- 排查 :
EXPLAIN看是否全表扫描;看innodb_buffer_pool_size是否过小导致频繁换页;SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'看物理读比例。 - 根因:Buffer Pool 太小,或查询没有合适索引,导致热页被挤出。
- 方案 :加索引、扩大 Buffer Pool、避免
SELECT *和大范围扫描。
一句话带走
- MySQL = 连接层 + Server 层 + 引擎层,优化器按成本选执行计划。
- InnoDB 的核心竞争力是事务 + 行锁 + redo 崩溃恢复。
- Buffer Pool 是性能命门,LRU 冷热分离防止全表扫描污染缓存。
上一篇:\[MySQL与Redis/MySQL/00 · MySQL 知识地图(MOC)\|MySQL 知识地图] | 下一篇:\[MySQL与Redis/MySQL/02 · 索引与 B+ 树\|02 · 索引与 B+ 树]
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法[1](#甘特图的mermaid语法1) 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.
javascript
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
| 项目 | Value |
|---|---|
| 电脑 | $1600 |
| 手机 | $12 |
| 导管 | $1 |
设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列 | 第二列 | 第三列 |
|---|---|---|
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants 是一个文本转换工具,主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如:
| 原始符号 | 转换后 | 说明 |
|---|---|---|
"引号" |
"引号" | 直引号变弯引号 |
'单引号' |
'单引号' | 直单引号变弯单引号 |
-- |
-- | 两个连字符变短破折号 |
--- |
--- | 三个连字符变长破折号 |
... |
... | 三个点变省略号 |
创建一个自定义列表
:
Text-to- conversion tool
: John
: Luke
如何创建一个注脚
一个具有注脚的文本。[2](#2)
注释也是必不可少的
Markdown将文本转换为 。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
#mermaid-svg-vOdxRHaGRhd1xm7t{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-vOdxRHaGRhd1xm7t .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vOdxRHaGRhd1xm7t .error-icon{fill:#552222;}#mermaid-svg-vOdxRHaGRhd1xm7t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vOdxRHaGRhd1xm7t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vOdxRHaGRhd1xm7t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vOdxRHaGRhd1xm7t .marker.cross{stroke:#333333;}#mermaid-svg-vOdxRHaGRhd1xm7t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vOdxRHaGRhd1xm7t p{margin:0;}#mermaid-svg-vOdxRHaGRhd1xm7t .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-vOdxRHaGRhd1xm7t .exclude-range{fill:#eeeeee;}#mermaid-svg-vOdxRHaGRhd1xm7t .section{stroke:none;opacity:0.2;}#mermaid-svg-vOdxRHaGRhd1xm7t .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-vOdxRHaGRhd1xm7t .section2{fill:#fff400;}#mermaid-svg-vOdxRHaGRhd1xm7t .section1,#mermaid-svg-vOdxRHaGRhd1xm7t .section3{fill:white;opacity:0.2;}#mermaid-svg-vOdxRHaGRhd1xm7t .sectionTitle0{fill:#333;}#mermaid-svg-vOdxRHaGRhd1xm7t .sectionTitle1{fill:#333;}#mermaid-svg-vOdxRHaGRhd1xm7t .sectionTitle2{fill:#333;}#mermaid-svg-vOdxRHaGRhd1xm7t .sectionTitle3{fill:#333;}#mermaid-svg-vOdxRHaGRhd1xm7t .sectionTitle{text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-vOdxRHaGRhd1xm7t .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-vOdxRHaGRhd1xm7t .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-vOdxRHaGRhd1xm7t .grid path{stroke-width:0;}#mermaid-svg-vOdxRHaGRhd1xm7t .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-vOdxRHaGRhd1xm7t .task{stroke-width:2;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskText{text-anchor:middle;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutsideRight{fill:black;text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-vOdxRHaGRhd1xm7t .task.clickable{cursor:pointer;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskText0,#mermaid-svg-vOdxRHaGRhd1xm7t .taskText1,#mermaid-svg-vOdxRHaGRhd1xm7t .taskText2,#mermaid-svg-vOdxRHaGRhd1xm7t .taskText3{fill:white;}#mermaid-svg-vOdxRHaGRhd1xm7t .task0,#mermaid-svg-vOdxRHaGRhd1xm7t .task1,#mermaid-svg-vOdxRHaGRhd1xm7t .task2,#mermaid-svg-vOdxRHaGRhd1xm7t .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutside0,#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutside2{fill:black;}#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutside1,#mermaid-svg-vOdxRHaGRhd1xm7t .taskTextOutside3{fill:black;}#mermaid-svg-vOdxRHaGRhd1xm7t .active0,#mermaid-svg-vOdxRHaGRhd1xm7t .active1,#mermaid-svg-vOdxRHaGRhd1xm7t .active2,#mermaid-svg-vOdxRHaGRhd1xm7t .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-vOdxRHaGRhd1xm7t .activeText0,#mermaid-svg-vOdxRHaGRhd1xm7t .activeText1,#mermaid-svg-vOdxRHaGRhd1xm7t .activeText2,#mermaid-svg-vOdxRHaGRhd1xm7t .activeText3{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .done0,#mermaid-svg-vOdxRHaGRhd1xm7t .done1,#mermaid-svg-vOdxRHaGRhd1xm7t .done2,#mermaid-svg-vOdxRHaGRhd1xm7t .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-vOdxRHaGRhd1xm7t .doneText0,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText1,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText2,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText3{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .doneText0.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText0.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText1.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText1.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText2.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText2.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText3.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .crit0,#mermaid-svg-vOdxRHaGRhd1xm7t .crit1,#mermaid-svg-vOdxRHaGRhd1xm7t .crit2,#mermaid-svg-vOdxRHaGRhd1xm7t .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-vOdxRHaGRhd1xm7t .activeCrit0,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCrit1,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCrit2,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-vOdxRHaGRhd1xm7t .doneCrit0,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCrit1,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCrit2,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-vOdxRHaGRhd1xm7t .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-vOdxRHaGRhd1xm7t .milestoneText{font-style:italic;}#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText0,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText1,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText2,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText3{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText0.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText0.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText1.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText1.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText2.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText2.taskTextOutsideRight,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText3.taskTextOutsideLeft,#mermaid-svg-vOdxRHaGRhd1xm7t .doneCritText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .vert{stroke:navy;}#mermaid-svg-vOdxRHaGRhd1xm7t .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .activeCritText0,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCritText1,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCritText2,#mermaid-svg-vOdxRHaGRhd1xm7t .activeCritText3{fill:black!important;}#mermaid-svg-vOdxRHaGRhd1xm7t .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-vOdxRHaGRhd1xm7t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
- 关于 甘特图 语法,参考 这儿,
UML图表
可以使用UML图表进行渲染,例如下面产生的一个序列图:
王五 李四 张三 王五 李四 张三 #mermaid-svg-4sutvz8ypZqy74z9{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-4sutvz8ypZqy74z9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4sutvz8ypZqy74z9 .error-icon{fill:#552222;}#mermaid-svg-4sutvz8ypZqy74z9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4sutvz8ypZqy74z9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4sutvz8ypZqy74z9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4sutvz8ypZqy74z9 .marker.cross{stroke:#333333;}#mermaid-svg-4sutvz8ypZqy74z9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4sutvz8ypZqy74z9 p{margin:0;}#mermaid-svg-4sutvz8ypZqy74z9 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4sutvz8ypZqy74z9 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-4sutvz8ypZqy74z9 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-4sutvz8ypZqy74z9 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-4sutvz8ypZqy74z9 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-4sutvz8ypZqy74z9 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-4sutvz8ypZqy74z9 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-4sutvz8ypZqy74z9 .sequenceNumber{fill:white;}#mermaid-svg-4sutvz8ypZqy74z9 #sequencenumber{fill:#333;}#mermaid-svg-4sutvz8ypZqy74z9 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-4sutvz8ypZqy74z9 .messageText{fill:#333;stroke:none;}#mermaid-svg-4sutvz8ypZqy74z9 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4sutvz8ypZqy74z9 .labelText,#mermaid-svg-4sutvz8ypZqy74z9 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-4sutvz8ypZqy74z9 .loopText,#mermaid-svg-4sutvz8ypZqy74z9 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-4sutvz8ypZqy74z9 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-4sutvz8ypZqy74z9 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-4sutvz8ypZqy74z9 .noteText,#mermaid-svg-4sutvz8ypZqy74z9 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-4sutvz8ypZqy74z9 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4sutvz8ypZqy74z9 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4sutvz8ypZqy74z9 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4sutvz8ypZqy74z9 .actorPopupMenu{position:absolute;}#mermaid-svg-4sutvz8ypZqy74z9 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-4sutvz8ypZqy74z9 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4sutvz8ypZqy74z9 .actor-man circle,#mermaid-svg-4sutvz8ypZqy74z9 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-4sutvz8ypZqy74z9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 李四想了很长时间, 文字太长了 不适合放在一行. 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 打量着王五... 很好... 王五, 你怎么样?
- 关于 UML图表 语法,参考 这儿,
流程图
#mermaid-svg-QrEHJSqDHtH6fBPb{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-QrEHJSqDHtH6fBPb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QrEHJSqDHtH6fBPb .error-icon{fill:#552222;}#mermaid-svg-QrEHJSqDHtH6fBPb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QrEHJSqDHtH6fBPb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QrEHJSqDHtH6fBPb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QrEHJSqDHtH6fBPb .marker.cross{stroke:#333333;}#mermaid-svg-QrEHJSqDHtH6fBPb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QrEHJSqDHtH6fBPb p{margin:0;}#mermaid-svg-QrEHJSqDHtH6fBPb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster-label text{fill:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster-label span{color:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster-label span p{background-color:transparent;}#mermaid-svg-QrEHJSqDHtH6fBPb .label text,#mermaid-svg-QrEHJSqDHtH6fBPb span{fill:#333;color:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb .node rect,#mermaid-svg-QrEHJSqDHtH6fBPb .node circle,#mermaid-svg-QrEHJSqDHtH6fBPb .node ellipse,#mermaid-svg-QrEHJSqDHtH6fBPb .node polygon,#mermaid-svg-QrEHJSqDHtH6fBPb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QrEHJSqDHtH6fBPb .rough-node .label text,#mermaid-svg-QrEHJSqDHtH6fBPb .node .label text,#mermaid-svg-QrEHJSqDHtH6fBPb .image-shape .label,#mermaid-svg-QrEHJSqDHtH6fBPb .icon-shape .label{text-anchor:middle;}#mermaid-svg-QrEHJSqDHtH6fBPb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QrEHJSqDHtH6fBPb .rough-node .label,#mermaid-svg-QrEHJSqDHtH6fBPb .node .label,#mermaid-svg-QrEHJSqDHtH6fBPb .image-shape .label,#mermaid-svg-QrEHJSqDHtH6fBPb .icon-shape .label{text-align:center;}#mermaid-svg-QrEHJSqDHtH6fBPb .node.clickable{cursor:pointer;}#mermaid-svg-QrEHJSqDHtH6fBPb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QrEHJSqDHtH6fBPb .arrowheadPath{fill:#333333;}#mermaid-svg-QrEHJSqDHtH6fBPb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QrEHJSqDHtH6fBPb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QrEHJSqDHtH6fBPb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QrEHJSqDHtH6fBPb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QrEHJSqDHtH6fBPb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QrEHJSqDHtH6fBPb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster text{fill:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb .cluster span{color:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb 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-QrEHJSqDHtH6fBPb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QrEHJSqDHtH6fBPb rect.text{fill:none;stroke-width:0;}#mermaid-svg-QrEHJSqDHtH6fBPb .icon-shape,#mermaid-svg-QrEHJSqDHtH6fBPb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QrEHJSqDHtH6fBPb .icon-shape p,#mermaid-svg-QrEHJSqDHtH6fBPb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QrEHJSqDHtH6fBPb .icon-shape .label rect,#mermaid-svg-QrEHJSqDHtH6fBPb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QrEHJSqDHtH6fBPb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QrEHJSqDHtH6fBPb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QrEHJSqDHtH6fBPb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 链接
长方形
圆
圆角长方形
菱形
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart.js的流程图语法:
Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释 ↩︎
*[HTML]: 超文本标记语言