结构对比

结构对比

结构对比功能用于比较两个数据源之间的数据库结构差异,并提供可视化的差异展示和一键同步能力。

功能概述

  • 跨库结构对比(支持 MySQL、PostgreSQL、Oracle、SQL Server、SQLite 之间互比)
  • 差异可视化(仅源库有 / 仅目标库有 / 两端都有)
  • 列级结构对比
  • DDL 语句对比
  • 结构同步(DDL 预览 → 编辑 → 执行)
  • 数据对比与同步

页面布局

┌─────────────────────────────────────────────────────┐
│  源数据源: [选择]  数据库: [选择]   ⇄   目标数据源: [选择]  数据库: [选择]  │
│                                    [对比]            │
├──────────────┬──────────────────────────────────────┤
│  对象列表     │  详情面板                             │
│              │  [数据] [结构] [DDL]                   │
│  🔍 搜索     │                                      │
│              │  ┌──────────┬──────────┐              │
│  ✅ users    │  │ 源库数据  │ 目标库数据 │              │
│  ⚠️ orders   │  │          │          │              │
│  🔵 products │  └──────────┴──────────┘              │
│              │                                      │
│              │  [同步结构]  [同步数据]                  │
└──────────────┴──────────────────────────────────────┘

操作步骤

1. 选择数据源

  • 源数据源 — 选择左侧对比的数据库
  • 目标数据源 — 选择右侧对比的数据库
  • 分别选择对应的数据库/Schema

对于两级数据库(PostgreSQL、SQL Server),需要分别选择数据库和 Schema。 对于单级数据库(MySQL、Oracle),只需选择数据库。

2. 执行对比

点击 「对比」 按钮,系统分别连接两个数据库,查询 information_schema 获取表/视图元数据,计算差异。

3. 查看差异

对比完成后,左侧对象列表展示结果:

图标 含义 说明
✅ 绿色 两端都有 表/视图在源库和目标库都存在
⚠️ 橙色 仅源库有 表/视图只在源库存在,目标库缺失
🔵 蓝色 仅目标库有 表/视图只在目标库存在

点击对象名,右侧展示详细信息。

4. 查看详情

右侧详情面板有三个标签页:

数据标签页

左右并排展示源库和目标库的表数据:

  • 支持分页浏览
  • 源库数据表有 Checkbox 列,可选中行
  • 用于数据级对比

结构标签页

列级结构对比:

列 说明
列名 字段名称
源库类型 源库中的数据类型
目标库类型 目标库中的数据类型
差异 高亮显示差异项(黄色背景)

差异类型包括:

  • 类型不同(如 varchar(50) vs varchar(100))
  • 可空性不同
  • 默认值不同
  • 注释不同

DDL 标签页

展示源库和目标库的建表 DDL 语句,方便对比。

5. 交换源/目标

点击 ⇄ 按钮,快速交换源数据源和目标数据源。

6. 对比历史

系统记录最近 5 次对比历史(存储在浏览器 localStorage),可快速回顾之前的对比结果。

结构同步

当发现结构差异后,可以直接同步:

同步流程(两步式)

  1. 预览 — 点击「同步结构」,系统生成 DDL 语句
  2. 编辑 — 在弹出的文本框中查看/编辑 DDL
  3. 执行 — 确认后执行 DDL 到目标库

同步动作

动作 场景 生成的 DDL
create 目标库无此表 CREATE TABLE(适配目标库方言)
alter 目标库有此表但结构不同 ALTER TABLE ADD/MODIFY COLUMN

DDL 预览

系统自动生成的 DDL 可以在执行前编辑:

  • 修改列定义
  • 添加额外语句
  • 删除不需要的变更

建议仔细检查 DDL 后再执行,特别是生产环境。

数据同步

除了结构同步,还支持数据同步:

同步模式

模式 说明
全量同步 将源表全部数据写入目标表
选中行同步 仅同步在数据对比中选中的行
行差异同步 按指定字段对比,仅同步有差异的行

同步选项

选项 说明
清空目标表 同步前先 TRUNCATE 目标表
同步 ID 字段 是否同步自增主键列
同步指定列 仅同步选定的列(Transfer 组件选择)
检查字段 行差异同步时用于对比的字段列表

同步策略

  • 重复键自动跳过(INSERT IGNORE / ON CONFLICT DO NOTHING)
  • 事务执行,失败整表回滚
  • 同步数据自动归档为 CSV 文件
  • 操作写入审计日志

支持的跨库对比

结构对比支持以下任意两种数据库之间的对比:

源库 目标库 说明
MySQL PostgreSQL 自动适配方言差异
MySQL Oracle 类型映射转换
PostgreSQL SQL Server Schema 结构适配
Oracle MySQL 数据类型转换
… … 任意组合均支持

跨库对比时,系统会自动处理数据类型映射差异(如 MySQL 的 datetime vs PostgreSQL 的 timestamp)。