dbx/docs/content/docs/schema-diff.cn.mdx

90 lines
3.2 KiB
Plaintext

---
title: Schema 对比
description: 对比两个数据库的结构差异,生成可审查的同步 SQL。
---
Schema 对比用于检查两个数据库环境之间的结构差异,例如开发库和生产库、测试库和预发库,或迁移前后的数据库。
<Callout type="warn">Schema 同步可能包含删除表、删除字段、修改字段类型等破坏性操作。生成 SQL 后请逐条审查,生产环境建议先备份。</Callout>
## 适合的场景
- 检查开发环境中的结构变更是否已经同步到生产
- 对齐 staging、QA、production 等多套环境
- 生成迁移脚本,交给团队审查后执行
- 对比两个版本数据库之间的表、字段、索引差异
## 使用流程
<Steps>
<Step>
### 选择源库
源库通常是你认为“结构较新”或“结构正确”的数据库。
</Step>
<Step>
### 选择目标库
目标库是需要被检查或同步的数据库。它可以和源库位于不同服务器,也可以是不同数据库引擎。
</Step>
<Step>
### 执行对比
DBX 会读取两边的表、字段和索引元数据,并计算差异。当前对比只处理表,不包含视图。
</Step>
<Step>
### 审查差异
重点检查缺失表、额外表、字段类型变化、是否允许 NULL、默认值变化、索引增删和可能的数据风险。
</Step>
<Step>
### 生成同步 SQL
根据差异生成 `CREATE TABLE`、`ALTER TABLE`、`DROP TABLE` 等语句。确认后再决定是否执行。
</Step>
</Steps>
## 差异类型
| 类型 | 含义 |
| ------------ | -------------------------------------------- |
| 仅源库存在 | 目标库缺少该对象,通常需要创建 |
| 仅目标库存在 | 目标库多出该对象,删除前需要确认是否仍被使用 |
| 字段差异 | 字段类型、是否允许 NULL 或默认值不同 |
| 索引差异 | 按索引名称检查新增或删除的索引 |
<Callout type="info">当前 Schema 对比不完整覆盖外键、触发器、视图定义、字段注释,也不会检测同名索引的列或唯一性变化。重要迁移仍建议人工审查生成的 SQL。</Callout>
## 数据库覆盖范围
Schema 对比依赖表、字段和索引元数据。它更适合 MySQL、PostgreSQL、SQLite、SQL Server、Oracle、Redshift、DM、GaussDB 系等可以稳定读取关系结构的数据库。Redis、MongoDB、Elasticsearch 的数据模型不同,不适合作为关系型 Schema 同步目标。
## 执行前检查
同步前建议确认:
- 当前连接颜色和环境名称是否正确
- 目标库是否已经备份
- `DROP`、`TRUNCATE`、字段类型变更是否符合预期
- 是否需要在业务低峰期执行
- 是否需要先在测试环境验证生成的 SQL
## 相关功能
<Cards>
<Card title="表结构编辑器" href="/cn/docs/table-structure">
对单张表进行可视化结构修改,并在保存前预览 DDL。
</Card>
<Card title="数据库导出" href="/cn/docs/database-export">
在执行高风险同步前导出结构和数据。
</Card>
<Card title="数据库支持" href="/cn/docs/databases">
查看哪些数据库支持结构相关工作流。
</Card>
</Cards>