免费工具

MySQL 和 MariaDB 转 ER 图

粘贴 mysqldump 文件或 MySQL Workbench 脚本,反引号、ENGINE 选项和版本注释都可以保留,即可得到表和外键的 ER 图。MariaDB 的转储也按同样方式读取。试试包含商品、规格、订单和评价的电商店面示例。

示例输出

由 MySQL 示例绘制的示例图表
试试示例电商店面

使用方法

  1. 粘贴或拖入 MySQL 转储

    mysqldump 或 mariadb-dump 的输出、从 Workbench 或 phpMyAdmin 导出的内容,或 SHOW CREATE TABLE 打印出的 CREATE TABLE 文本都可以。

  2. 查看表及其关联

    每张表会变成一张带有列和键的卡片。无论外键是声明为约束,还是用 REFERENCES 内联写出,都会成为对应列之间的连线。

  3. 在 Archboard 中打开

    保存为新图表后,可以重新排列、添加注释、分享链接,或导出为 SVG 和 PNG。注册只需 Google 或 GitHub 账号。

从 MySQL 导出数据库结构

运行以下命令,然后粘贴 schema.sql 或拖入该文件:

  1. --no-data 不导出数据行,--skip-comments 和 --compact 会去掉开头的注释以及 DROP TABLE、LOCK TABLES、SET NAMES 行。把 mydb 换成数据库名,需要时加上 -u 和 -p。在 MariaDB 中,mariadb-dump 接受相同的选项。

    mysqldump --no-data --skip-comments --compact mydb > schema.sql

转储中的 MySQL 语法

mysqldump 文件中各语法结构的处理方式:

`order_items`
会读取。反引号中的名称与不加反引号的同名名称视为相同;如果转储设置了 ANSI_QUOTES,双引号中的名称也能识别。
ENGINE=InnoDB
与 DEFAULT CHARSET、COLLATE 等其他表选项一起跳过;表本身会被读取。
AUTO_INCREMENT
不显示:列保留自己的类型,例如 INT UNSIGNED。写在表定义之后的 AUTO_INCREMENT 计数值也会被忽略。
REFERENCES products (id)
画成关系。MySQL 9.0 之前的版本接受这种内联写法但不会执行,因此预览发现时会附上提示。
KEY idx_name (name)
普通索引,不添加标记。UNIQUE KEY 标为 UK;紧跟在列定义后的 KEY 与 MySQL 中的含义相同,表示主键。
/*!40101 … */
视为注释并跳过,mysqldump 在每张表前后写入的 SET 行也在其中。
DELIMITER ;;
能够识别:DELIMITER 行之间的存储过程和函数会整体跳过并计数,其后的表仍会被读取。mysqldump 写在其中的触发器和事件包在版本注释里,因此会作为注释跳过。
ENUM (…) · SET (…)
列类型显示为 enum 和 set;不会列出可选值。

MySQL 图表不包含的内容

  • 存储过程、函数、触发器和事件,都不会被绘制。预览会为存储过程和函数计数;mysqldump 写在版本注释中的触发器和事件则作为注释跳过。
  • /*!50100 PARTITION BY … */ 这类版本注释中的内容。这部分文本按注释处理,因此分区等与版本相关的选项不会显示。
  • 扩展 INSERT 语句中的行。即使一行 INSERT 有几 MB,也会直接跳过、不被读取。
  • 运行中的 MySQL 或 MariaDB 服务器上的任何信息。不会建立连接,因此不显示行数、表大小和服务器设置。

MySQL 和 MariaDB 常见问题

哪个 mysqldump 命令最合适?

mysqldump --no-data --skip-comments --compact mydb > schema.sql 只输出 CREATE TABLE 语句,不含数据行,也不含包在外面的那些行。完整转储也可以:INSERT 语句会被跳过,因此图表相同,只是文件更大。

支持 MariaDB 吗?

支持。MariaDB 写出的转储格式相同,选择 MySQL / MariaDB 或交给自动识别即可。mariadb-dump 的输出、反引号名称和 AUTO_INCREMENT 的读取方式与 MySQL 相同;无论文件由哪个服务器生成,内联的 REFERENCES 都会画成关系。

为什么内联 REFERENCES 会附带提示?

在 MySQL 8 及更早版本中,紧跟在列后写的 REFERENCES 会被接受但被忽略,不会创建外键;MySQL 9.0 及之后的版本会创建它。由于脚本声明了这个关系,图表在两种情况下都会画出它,提示则是提醒你检查数据库中是否真的有这个键。

可以粘贴 Workbench 脚本或迁移文件来代替转储吗?

可以。MySQL Workbench 正向工程生成的脚本、Laravel 的模式转储、Rails 的 structure.sql,或手写的 DDL 都可以。ALTER TABLE … ADD CONSTRAINT … FOREIGN KEY、ADD COLUMN 这类之后修改表的语句,会应用到它们指定的表上。

粘贴 MySQL 转储时会保存什么吗?

预览不会被保存。选择“在 Archboard 中打开”后,绘制出的图表,包括表卡片、列名和类型以及关系连线,会作为新图表保存到你的工作区中。之后对 MySQL 模式的修改不会更新它。

MySQL ER 图工具免费吗?

是的。粘贴转储和查看图表无需账号。在 Archboard 中打开图表需要一个免费账号。

一分钟打开画布

使用 Google 或 GitHub 登录。单席位免费,团队加入后再升级。