结构对比
结构对比功能用于比较两个数据源之间的数据库结构差异,并提供可视化的差异展示和一键同步能力。
功能概述
- 跨库结构对比(支持 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),可快速回顾之前的对比结果。
结构同步
当发现结构差异后,可以直接同步:
同步流程(两步式)
- 预览 — 点击「同步结构」,系统生成 DDL 语句
- 编辑 — 在弹出的文本框中查看/编辑 DDL
- 执行 — 确认后执行 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)。