# Database Expert

> 分析 MySQL 与 SQL Server 的表结构和表数据：列出库表、查看字段/索引、执行只读统计与抽样查询； 判断字段是否有枚举字典（SYSTEM_LOOKUP/CODE_TABLE/tsys_dict）或独立主数据表及覆盖率。 当用户提到 Database Expert、数据库专家、数据库分析、表结构、字段分析、行数统计、 数据字典、枚举字典、字典表、SYSTEM_LOOKUP、CODE_TABLE、主数据表、字段有没有字典、 MySQL、SQL Server、hsuf、ufg_account、ufg_fund、ufg_query、ufg_settle、ufg_trade、 bos_igbscb、gts_cicc_sit、PRODUCT、核对差异分析时使用。

- Skill: `yangchen91/database-expert` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add yangchen91/database-expert`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yangchen91/database-expert/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: YangChen91 (https://skillmd.com/u/yangchen91)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/yangchen91/database-expert

---


# Database Expert（数据库专家）

分析 MySQL 与 SQL Server 的**表结构**和**表数据**。

## 连接配置

连接前先阅读 [connections.md](connections.md)。

默认 MySQL 配置：**`mysql-local`**

- 地址：`localhost`
- 用户：`root`
- 密码：`Hundsun@2026`
- 端口：`33061`

## 本地 MySQL 库

以下库存在于 **`mysql-local`**（已通过 `INFORMATION_SCHEMA.SCHEMATA` 验证）：

| 库名 | 表数量 | 用途 | 常见表前缀 |
|------|--------|------|------------|
| `hsuf` | 89 | 系统框架：用户、角色、菜单、字典、审批、机构 | `tsys_*` |
| `ufg_account` | 386 | 账户/客户主数据、资金账户、客户信息 | `ac_*`, `as_*`, `uc_*` |
| `ufg_fund` | 19 | 基金/组合数据 | `fd_*` |
| `ufg_query` | 305 | 查询/历史/报表数据 | `hs_*`, `uc_*` |
| `ufg_settle` | 50 | 清算/交收 | `st_*` |
| `ufg_trade` | 250 | 交易参数、委托、行情 | `td_*`, `as_*`, `ac_*` |

用户提到库名（如 `ufg_account`、`ufg_settle`、`hsuf`）或相关表前缀（`ac_fundaccount`、`td_*`、`tsys_*`）时，默认使用 **`mysql-local`**，除非用户指定其他环境。

完整连接详情见 [connections.md](connections.md)。

## 工作流程

1. 确认数据库类型（MySQL / SQL Server）和目标库。
2. 从 `connections.md` 加载对应连接配置。
3. 连接并验证（`SELECT 1`、`SELECT DATABASE()` 或 `COUNT(*)`）。
4. 结构分析：
   - MySQL：`INFORMATION_SCHEMA.COLUMNS`、`SHOW CREATE TABLE 库.表`、`SHOW INDEX FROM 库.表`
   - SQL Server：`INFORMATION_SCHEMA.COLUMNS`、`sys.columns`、`sp_help 'schema.table'`
5. 数据分析：
   - 先执行 `COUNT(*)`
   - 再使用 `LIMIT` / `TOP` 抽样
   - 仅在用户明确要求时才全表读取
6. 输出：连接状态、对象名称、字段或统计结果、错误信息。

## 字段是否有枚举字典 / 独立主表

用户问「某字段有没有数据字典 / 枚举 / 码表 / 主数据表」时，**必须按完整链路分析**，不要只看有无 FK。

详细步骤、SQL 模板、易混淆点与 `bos_igbscb` 案例见 [field-dictionary-analysis.md](field-dictionary-analysis.md)。

**最短路径：**

1. 列类型 + FK/CHECK  
2. `DISTINCT` 取值与计数  
3. 搜独立主表（表名/同名列）与 lookup（SQL Server：`SYSTEM_LOOKUP.SYS_LOOKUP_KEY`、`CODE_TABLE`；MySQL：`hsuf.tsys_dict_*`）  
4. 覆盖率：业务非空码是否 ⊆ 字典；列出游离码与未使用字典码  
5. 显式排除易混淆表（名称相近但码域不同）  
6. 结论写清：权威来源类型（枚举 / 主表 / 公式引用 / 无）+ 有无 FK

**经验要点：**

- BOS 大量码字段**无 FK**，字典常在 `SYSTEM_LOOKUP`（`SYS_LOOKUP_KEY` + `LOOKUP_KEY`），`NAME` 经常为空。  
- 独立主表（如 `MARKET`、`Bank`、`FRR_GRADE`）优先于 lookup。  
- 同一码值可能命中多个 lookup 类型，用**类型名语义 + 站点后缀**选型，勿只按码重叠判定。

## 推荐执行方式

MySQL 快速查询使用辅助脚本：

```bash
python scripts/db_query.py --database ufg_account --sql "SELECT COUNT(*) AS cnt FROM ac_fundaccount"
```

JSON 格式输出：

```bash
python scripts/db_query.py --database ufg_account --sql "SELECT COUNT(*) AS cnt FROM ac_fundaccount" --json
```

若缺少 `pymysql`，脚本会自动安装。

## MySQL 参考 SQL

**表字段**

```sql
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'ufg_account' AND TABLE_NAME = 'ac_fundaccount'
ORDER BY ORDINAL_POSITION;
```

**行数统计**

```sql
SELECT COUNT(*) FROM ufg_account.ac_fundaccount;
```

## SQL Server 参考 SQL

本地已验证库见 `connections.md`（`mssql-gts-cicc-sit`、`mssql-bos-igbscb`）。

```sql
SELECT COUNT(*) FROM dbo.CLIENT;
```

字段字典 / 主表判定 SQL 见 [field-dictionary-analysis.md](field-dictionary-analysis.md)。

## 输出格式

保持简洁：

```markdown
## 连接信息
- 数据库：MySQL
- 配置：mysql-local
- 库名：ufg_account

## 查询结果
- 表：ac_fundaccount
- 行数：<数量>
```

## 安全规则

- 默认只读，不执行写操作。
- 不要在输出中显示密码。
- 执行破坏性或大表全扫描前先提醒用户。

