cursor-mysql数据库的ddl生成skills

我爱海鲸 2026-05-29 23:45:49 暂无标签

简介mysql、ddl

可以把技能放到本机用户目录的 ~/.cursor/skills/<技能目录>/(Windows 一般是 C:\Users\你的用户名\.cursor\skills\)。这样任意项目打开后,只要 Cursor 会加载用户级 skills,就不必每个仓库复制一份。


注意:~/.cursor/skills-cursor/ 是 Cursor 内置技能目录,不要把自己的技能放进去;自定义技能用 项目 .cursor/skills/ 或 用户 ~/.cursor/skills/。

在项目的根目录下创建:.cursor\skills\mysql-ddl-generator

SKILL.md:

---
name: mysql-ddl-generator
description: 生成 MySQL 建表 DDL(CREATE TABLE)语句。只要用户提到建表、表结构、字段设计、索引设计、写 DDL、CREATE TABLE、.sql 建表文件、MySQL schema,或描述「帮我设计一张表」「这几个字段怎么建表」,都必须使用本 skill。适用于自然语言描述或结构化字段列表输入。
---

# MySQL DDL 生成器

根据用户的自然语言描述或结构化字段列表,生成可直接用于生产的 MySQL `CREATE TABLE` DDL。

## 工作流程

1. 理解用户需求:表名、用途、字段、索引、唯一约束
2. 若用户只给表名、未给字段,先追问至少一组核心业务字段
3. 严格应用下文「强制规范」
4. 将 DDL 写入 `.sql` 文件(文件名默认与表名一致,如 `t_user` → `t_user.sql`;用户指定路径时从其指定)
5. 写完后告知文件路径,并简要概括表结构(字段数、主键、索引)

## 强制规范

生成的 DDL 必须遵守以下规则。

### 存储引擎与字符集

表末尾统一使用:

```sql
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
```

原因:InnoDB 支持事务与行级锁;utf8mb4 完整支持 Unicode(含 emoji);utf8mb4_unicode_ci 适合不区分大小写的排序场景。

### 字段注释

每个字段必须有 `COMMENT`,默认使用中文,清晰描述业务含义。枚举/状态类字段在注释中写明取值含义。

### 默认值策略

| 类型 | 规则 |
|------|------|
| VARCHAR、CHAR | `NOT NULL DEFAULT ''`,除非业务明确要求可空 |
| INT、BIGINT、TINYINT、DECIMAL 等数值 | `NOT NULL DEFAULT 0`(或业务合理的默认值,如 `DEFAULT 1`) |
| JSON | `DEFAULT NULL`(扩展字段通常可选) |
| TEXT | 不加 `NOT NULL`,不加 DEFAULT(严格模式下 TEXT 不支持 DEFAULT;用于可选长文本) |
| DATETIME / TIMESTAMP | 按需使用 `DEFAULT CURRENT_TIMESTAMP` 或 `DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP` |

### 审计时间字段

除用户明确不要外,每张表在索引定义之前、业务字段之后,追加:

```sql
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
```

原因:便于排查问题、审计变更、按时间范围查询。

### 主键

默认主键:

```sql
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
```

若用户描述暗示其他主键(不同字段名、类型或联合主键),按用户要求生成;不确定时先询问,不要擅自假设一定是 `id`。

### 索引命名

- 唯一索引:`uk_<列名或用途>`(如 `uk_username`、`uk_email`)
- 普通索引:`idx_<列名>`(如 `idx_create_time`、`idx_status`)
- 联合索引:`idx_<用途>`(如 `idx_user_status_time`)

用户明确要求的查询字段、唯一字段应建相应索引;未提及时不要过度添加索引。

### 默认不添加的内容

以下仅在用户**明确要求**时才加入:

- 软删除字段(如 `delete_flag`、`deleted_at`)
- 用户未描述的状态/扩展字段
- 表分区

## 输入格式

### 自然语言(推荐)

```
创建用户信息表 t_user,包含用户名(唯一)、昵称、邮箱、手机号、
账号状态(0禁用/1正常)、头像 URL、备注(长文本)、扩展信息(JSON)
```

### 结构化字段列表

```
t_user:
  username VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户名' UNIQUE
  nickname VARCHAR(64) NOT NULL DEFAULT '' COMMENT '昵称'
  status TINYINT(1) NOT NULL DEFAULT 1 COMMENT '账号状态 0禁用 1正常'
  ...
```

## 参考示例

**输入:**

```
创建用户信息表 t_user,包含用户名(唯一)、昵称、邮箱、手机号、
账号状态(0禁用/1正常)、头像 URL、备注(长文本)、扩展信息(JSON)
```

**输出:**

```sql
CREATE TABLE `t_user` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `username` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '用户名(唯一)',
    `nickname` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '昵称',
    `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '邮箱',
    `phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '手机号',
    `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '账号状态(0-禁用,1-正常)',
    `avatar_url` VARCHAR(512) NOT NULL DEFAULT '' COMMENT '头像 URL',
    `remark` TEXT COMMENT '备注',
    `extend_data` JSON DEFAULT NULL COMMENT '扩展信息(JSON 格式)',
    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_username` (`username`),
    KEY `idx_phone` (`phone`),
    KEY `idx_status` (`status`),
    KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';
```

## 字段类型选用建议

- 短文本标识/名称:VARCHAR,长度按业务估算(常见 32/64/128/512)
- IP 地址:VARCHAR(45)(兼容 IPv6)
- 金额:DECIMAL(18, 2) 或按精度要求调整
- 布尔/开关:TINYINT(1)
- 状态/枚举:TINYINT,取值含义写在 COMMENT
- 长文本/富文本:TEXT
- 结构化扩展:JSON

字段名使用 snake_case,与 Java 实体常见命名保持一致。

## 输出要求

- 将完整 DDL 写入 `.sql` 文件
- 默认保存到项目 `sql/` 目录(若存在);否则保存到用户指定目录或工作区根目录
- 回复中给出文件路径,并简要说明:表名、字段数量、主键、唯一键与普通索引

你好:我的2025