导出SQL
FcDesigner 支持根据当前表单字段自动生成数据表建表 SQL,也可对比历史建表语句生成 schema 变更 SQL。适用于把设计好的表单快速落到数据库表结构。
在设计器中生成

打开预览弹窗,切换到 生成SQL 标签页,即可查看当前表单对应的建表语句,并可直接复制使用。
若业务场景不需要该入口,可通过 config.showPreviewSql = false 隐藏「生成SQL」标签页,详见功能模块显隐。
生成结果以 MySQL 风格输出,默认使用 InnoDB 与 utf8mb4。
通过 API 获取
getSQL
获取当前表单对应的建表 SQL 列表。
js
const tables = designer.value.getSQL();
// [
// { name: 'order_form', sql: 'CREATE TABLE `order_form` (...)' },
// { name: 'order_form_items', sql: 'CREATE TABLE `order_form_items` (...)' },
// ]返回值类型:
ts
interface SqlTable {
/** 数据表名称 */
name: string;
/** 建表 SQL */
sql: string;
}getSQLDiff
对比历史建表 SQL 与当前表单,生成 schema 变更语句(CREATE / ALTER / DROP)。
js
// 不传参数时,会与设计器内部缓存的历史建表 SQL 对比
const alters = designer.value.getSQLDiff();
// 也可手动传入历史建表 SQL
const alters2 = designer.value.getSQLDiff(oldSqlTables);返回值类型:
ts
type SqlAlterAction =
| 'createTable'
| 'dropTable'
| 'addColumn'
| 'dropColumn'
| 'modifyColumn'
| 'renameColumn';
interface SqlAlter {
/** 数据表名称 */
name: string;
/** 变更类型 */
action: SqlAlterAction;
/** 字段名称 */
field?: string;
/** 变更 SQL */
sql: string;
}使用建议:
- 首次加载表单规则后,设计器会缓存一份建表 SQL,作为后续对比的基准。
- 业务侧也可以自行保存
getSQL()的结果,下次调用getSQLDiff(oldSql)时传入,用于生成升级脚本。
表名与字段规则
主表名称
优先使用表单配置中的「表单名称」生成表名;未配置时默认使用 fc_form。表名会自动清洗为合法标识(仅保留字母、数字、下划线和中文)。
系统字段
每张表都会自动包含:
| 字段 | 说明 |
|---|---|
id | 主键,自增 |
parent_id | 仅子表存在,用于关联主表 id |
字段注释
字段注释会写入组件标题,并附带组件内部标识,便于后续对比时识别字段重命名、类型调整等变更。
字段类型映射
内置组件会按值类型自动映射到 SQL 列类型。常见映射如下:
| 逻辑类型 | SQL 类型 | 典型组件场景 |
|---|---|---|
string | VARCHAR(255) | 输入框、单选、单选下拉等 |
text | TEXT | 富文本等长文本 |
number | INT | 计数器、评分等整数 |
float | DOUBLE | 浮点数 |
decimal | DECIMAL(p,s) | 带精度的金额/小数,默认 DECIMAL(10,2) |
date | TIMESTAMP | 日期、日期时间 |
boolean | TINYINT(1) | 开关(布尔值) |
array | JSON | 多选、区间、子表单数组等 |
object | JSON | 对象结构数据 |
部分组件会按属性动态决定类型,例如:
- 下拉多选 →
array - 日期区间 / 多个日期 →
array - 开关的开关值不是布尔时 → 按具体值类型映射为
number或string - 计数器配置了小数精度 →
decimal
子表单与多表
当表单中包含子表单、表格表单等容器,并且内部已有字段时,会额外生成子表:
- 主表仍会保留该子表单字段(类型为
array或object) - 子表名默认为
{主表名}_{字段名} - 子表自动增加
parent_id字段,用于关联主表
例如主表 order_form 中有明细字段 items,会额外生成 order_form_items。
自定义组件字段类型
扩展拖拽组件时,可通过 DragRule.sqlType 指定生成 SQL 时的字段类型。
js
const InputDragRule = {
name: 'customInput',
label: '自定义输入',
// ...
// 固定类型
sqlType: 'string',
// 或按规则动态返回
// sqlType: (rule) => rule.props?.multiple ? 'array' : 'string',
// 或指定小数精度
// sqlType: { type: 'decimal', precision: 12, scale: 2 },
};sqlType 支持以下取值:
ts
type SqlTypeName =
| 'string'
| 'text'
| 'float'
| 'number'
| 'decimal'
| 'date'
| 'array'
| 'object'
| 'boolean';
type SqlType =
| SqlTypeName
| {
type: 'decimal';
/** 总位数,默认 10 */
precision?: number;
/** 小数位数,默认 2 */
scale?: number;
};未配置 sqlType 时,默认按 string(VARCHAR(255))处理。
注意事项
- 导出 SQL 主要用于辅助建表与结构变更,生成结果建议人工确认后再执行。
- 字段是否必填会影响列的
NOT NULL/NULL。 - 对比变更时依赖字段注释中的组件标识;请尽量保留设计器生成的完整建表 SQL,再用于
getSQLDiff。 - 该能力与「数据库表设计」文档中的业务库表方案相互独立:前者按表单字段生成数据表,后者给出表单配置自身的存储建议。


