Database Expert(数据库专家)
分析 MySQL 与 SQL Server 的表结构和表数据。
连接配置
连接前先阅读 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。
工作流程
- 确认数据库类型(MySQL / SQL Server)和目标库。
- 从
connections.md加载对应连接配置。 - 连接并验证(
SELECT 1、SELECT DATABASE()或COUNT(*))。 - 结构分析:
- MySQL:
INFORMATION_SCHEMA.COLUMNS、SHOW CREATE TABLE 库.表、SHOW INDEX FROM 库.表 - SQL Server:
INFORMATION_SCHEMA.COLUMNS、sys.columns、sp_help 'schema.table'
- MySQL:
- 数据分析:
- 先执行
COUNT(*) - 再使用
LIMIT/TOP抽样 - 仅在用户明确要求时才全表读取
- 先执行
- 输出:连接状态、对象名称、字段或统计结果、错误信息。
字段是否有枚举字典 / 独立主表
用户问「某字段有没有数据字典 / 枚举 / 码表 / 主数据表」时,必须按完整链路分析,不要只看有无 FK。
详细步骤、SQL 模板、易混淆点与 bos_igbscb 案例见 field-dictionary-analysis.md。
最短路径:
- 列类型 + FK/CHECK
DISTINCT取值与计数- 搜独立主表(表名/同名列)与 lookup(SQL Server:
SYSTEM_LOOKUP.SYS_LOOKUP_KEY、CODE_TABLE;MySQL:hsuf.tsys_dict_*) - 覆盖率:业务非空码是否 ⊆ 字典;列出游离码与未使用字典码
- 显式排除易混淆表(名称相近但码域不同)
- 结论写清:权威来源类型(枚举 / 主表 / 公式引用 / 无)+ 有无 FK
经验要点:
- BOS 大量码字段无 FK,字典常在
SYSTEM_LOOKUP(SYS_LOOKUP_KEY+LOOKUP_KEY),NAME经常为空。 - 独立主表(如
MARKET、Bank、FRR_GRADE)优先于 lookup。 - 同一码值可能命中多个 lookup 类型,用类型名语义 + 站点后缀选型,勿只按码重叠判定。
推荐执行方式
MySQL 快速查询使用辅助脚本:
python scripts/db_query.py --database ufg_account --sql "SELECT COUNT(*) AS cnt FROM ac_fundaccount"
JSON 格式输出:
python scripts/db_query.py --database ufg_account --sql "SELECT COUNT(*) AS cnt FROM ac_fundaccount" --json
若缺少 pymysql,脚本会自动安装。
MySQL 参考 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;
行数统计
SELECT COUNT(*) FROM ufg_account.ac_fundaccount;
SQL Server 参考 SQL
本地已验证库见 connections.md(mssql-gts-cicc-sit、mssql-bos-igbscb)。
SELECT COUNT(*) FROM dbo.CLIENT;
字段字典 / 主表判定 SQL 见 field-dictionary-analysis.md。
输出格式
保持简洁:
## 连接信息
- 数据库:MySQL
- 配置:mysql-local
- 库名:ufg_account
## 查询结果
- 表:ac_fundaccount
- 行数:<数量>
安全规则
- 默认只读,不执行写操作。
- 不要在输出中显示密码。
- 执行破坏性或大表全扫描前先提醒用户。