数据库 01 · 体系结构与存储引擎

这里写自定义目录标题

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 语句的执行流程?

速记 › 连接器 → 解析器 → 优化器 → 执行器 → 存储引擎。

展开

  1. 连接器:建连接、验密码、查权限。
  2. 解析器:词法/语法分析,生成语法树;语法错误在这一步报。
  3. 优化器:决定走哪个索引、多表 join 的顺序,生成执行计划。
  4. 执行器:校验表权限,调用引擎接口逐行读取,把满足条件的行返回客户端。

追问

  • 优化器一定会选对索引吗? 不一定,它按统计信息估算成本;统计信息过期或数据分布倾斜时会选错,可用 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 * 和大范围扫描。

一句话带走

  1. MySQL = 连接层 + Server 层 + 引擎层,优化器按成本选执行计划。
  2. InnoDB 的核心竞争力是事务 + 行锁 + redo 崩溃恢复。
  3. Buffer Pool 是性能命门,LRU 冷热分离防止全表扫描污染缓存。

上一篇:\[MySQL与Redis/MySQL/00 · MySQL 知识地图(MOC)\|MySQL 知识地图] | 下一篇:\[MySQL与Redis/MySQL/02 · 索引与 B+ 树\|02 · 索引与 B+ 树]

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法[1](#甘特图的mermaid语法1) 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销: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. 项目1
  2. 项目2
  3. 项目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文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,

继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

*[HTML]: 超文本标记语言

相关推荐
CodeGL1 小时前
15、Python 访问数据库
数据库·python
小此方1 小时前
Re:Mysql数据库基础篇(五):拒绝脏数据!一文吃透MySQL表的约束(主键、唯一键、外键与实战案例)
数据库·mysql
想做小南娘,发现自己是女生喵1 小时前
LAN Device Monitor 第二周学习文档
java·服务器·数据库
byte轻骑兵1 小时前
【TextIn xParse + WorkBuddy】把8小时的标书审查压进1小时:招标要求逐条核验与废标风险预警工作台
大数据·数据库·aigc·textin·ai数据层基础设施
翔云1234562 小时前
Gaea(小米MySQL Proxy)整体架构
运维·数据库·mysql
jaysee-sjc2 小时前
【苍穹外卖】Day10:定时任务与 WebSocket 实时提醒实战
java·开发语言·javascript·数据库·vue.js·websocket·网络协议
牧瀬クリスだ2 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
瑞克-桑切斯2 小时前
PostgreSQL 14.4 源码部署 & 运维手册(CentOS7)
数据库·学习·postgresql
上海红同电子2 小时前
红同电子线束工厂100问|绝缘护套采购,材质PVC、TPE、PP该如何选型?
数据库·经验分享·职场和发展·产品运营·制造·材质