Files
dbx/docs/content/docs/table-structure.cn.mdx
T

145 lines
5.9 KiB
Plaintext

---
title: 表结构编辑器
description: 可视化查看和修改字段、索引、外键与触发器,并在执行前审查数据库方言对应的 DDL。
---
表结构编辑器把单表元数据和变更草稿放在持久化标签页中。DBX 会根据数据库 capability 只开放能够可靠生成的操作,并在保存前展示最终 DDL。
## 打开方式
- 右键表选择**查看结构**或**编辑结构**
- 从字段节点直接打开并定位对应字段
- 从索引节点直接打开并定位对应索引
- 从数据表格的表信息区域打开结构标签
- 从对象浏览器或 DDL 入口打开同一张表
编辑器会保留当前标签、滚动位置、列宽和本地字段顺序,便于在结构与数据之间切换。
## 结构标签
| 标签 | 主要内容 |
| --- | --- |
| 字段 | 名称、类型、长度/精度、可空、默认值、主键、自增、字符集、排序规则、注释 |
| 索引 | 名称、字段、类型、唯一、包含列、过滤条件、注释和重建入口 |
| 外键 | 本地字段、目标表/字段、`ON DELETE`、`ON UPDATE` |
| 触发器 | 触发器元数据、源码和数据库支持的创建/修改/删除 |
| DDL | 当前表定义或驱动生成的结构 SQL |
数据库未提供某类元数据时,对应标签会隐藏、只读或显示能力说明。
## 字段编辑
根据数据库能力,可以:
- 新增字段,或插入到当前选中字段之后
- 删除、重命名和修改字段
- 修改类型、长度、精度、Scale 和数据库专属长度单位
- 修改 `NULL`、默认值、主键、自增、字符集、排序规则和注释
- 使用常见默认值快捷选项
- 拖拽字段调整顺序
列重排有两种语义:
- MySQL 等支持物理列顺序的数据库会生成真正的顺序变更 DDL
- 部分数据库只在 DBX 中保存本地显示顺序,不修改数据库物理结构
创建新表时,可以使用设置中的预设字段快速加入常见主键、时间戳或审计字段。
## 索引、外键与触发器
索引能力按数据库方言开放,例如:
- 创建、删除或重建索引
- 普通、唯一和数据库专属索引类型
- PostgreSQL / SQL Server 等支持的包含列或过滤条件
- 索引注释(数据库支持时)
- 自动生成新索引名称,并允许修改
外键编辑包括字段映射和更新/删除动作。触发器编辑依赖数据库源码读取和安全 DDL 生成能力;不支持直接修改时仍可以查看源码或复制 DDL。
## DDL 预览
编辑不会立即写入数据库。保存前,DBX 会根据当前方言生成并高亮:
- `ALTER TABLE ... ADD/DROP/RENAME/MODIFY COLUMN`
- 默认值、`NULL`、主键和注释变更
- `CREATE INDEX`、`DROP INDEX`、重建索引
- 外键和触发器相关 DDL
- SQLite 等需要重建表时的迁移步骤
可以复制完整 DDL,在代码仓库中审查或交给迁移工具执行。
<Callout type="warn">字段删除、类型转换、收紧 `NULL`、修改主键、重排物理字段和重建表都可能锁表或丢失数据。生产环境先检查执行计划、锁影响、备份和回滚方案。</Callout>
## 保存流程
<Steps>
<Step>
### 读取最新结构
打开编辑器后确认字段、索引、外键和触发器已经加载完成。其他客户端刚修改过表时先刷新。
</Step>
<Step>
### 创建本地草稿
新增、修改、删除或重排对象。删除操作会以待删除状态显示,尚未执行。
</Step>
<Step>
### 审查 DDL
检查对象限定名、字段类型、默认值、约束、索引和每条语句顺序。
</Step>
<Step>
### 执行并刷新
确认后执行。生产范围会再次进入生产写入确认;成功后重新读取表结构。
</Step>
</Steps>
## 方言与能力差异
| 方言/数据库 | 典型行为 |
| --- | --- |
| MySQL / MariaDB 兼容 | 字段属性、物理重排、主键、索引、外键和注释覆盖较完整 |
| PostgreSQL / Gauss 系兼容 | 字段类型/默认值/可空/注释、索引包含列/过滤、外键等按方言生成 |
| SQLite | 部分复杂字段变更通过安全的表重建策略实现 |
| DuckDB | 支持常见字段与索引操作,但能力不同于 SQLite |
| SQL Server | 支持字段和索引变更,部分默认约束、包含列和过滤索引使用专属语法 |
| Oracle / 达梦等 | 使用 Oracle 风格字段、注释和索引 DDL;整数长度等无意义选项会禁用 |
| ClickHouse / Manticore / InfluxDB 等 | 只开放对应实现已验证的子集 |
| JDBC/Agent | 根据识别出的方言映射;无法可靠识别时保持只读 |
不要根据“能连接”推断“所有 DDL 都能编辑”。当前范围以 [数据库支持](/cn/docs/databases) 和编辑器实际控件为准。
## 并发与恢复
- 编辑草稿基于打开时读取的元数据,不会自动合并其他客户端的结构变更
- 执行失败后,数据库可能已经成功执行前面的部分语句
- SQLite 重建和多语句 DDL 的原子性取决于数据库和驱动
- 刷新会重新读取结构,未保存草稿可能需要先确认放弃
- 只读连接会阻止保存;生产连接每次写入都需要明确确认
## 使用建议
- 小范围单表修改可以直接使用编辑器
- 大规模迁移把复制的 DDL 纳入版本控制和 Review
- 多环境对齐使用 [Schema 对比](/cn/docs/schema-diff)
- 高风险操作前使用 [数据库导出](/cn/docs/database-export) 或 [定时数据库备份](/cn/docs/database-backup)
- 修改字段前结合 [字段血缘](/cn/docs/field-lineage) 和应用代码搜索评估影响
<Cards>
<Card title="Schema 对比" href="/cn/docs/schema-diff">
对比多个环境并生成部署脚本。
</Card>
<Card title="字段血缘" href="/cn/docs/field-lineage">
查看外键、视图和历史 SQL 中的字段关系。
</Card>
<Card title="生产安全" href="/cn/docs/production-safety">
配置只读连接和生产 DDL 确认。
</Card>
</Cards>