Blame view

.codex/skills/mcp-mysql-and-sql-validation/SKILL.md 5.69 KB
9e371380   “wangming”   把打印机的联通了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  ---
  name: mcp-mysql-and-sql-validation
  description: MCP MySQL 使用规范与统计 SQL 验证流程;接口测试后必须查库验证;用户问业务数据时自动查库。在使用 MCP 查库、写统计 SQL 或提交含 SQL 的代码时使用。
  ---
  
  # MCP MySQL 与 SQL 验证
  
  ## 一、Skills 定位说明(必读)
  
  本 Skills 用于**约束 AI 在涉及真实业务数据时的行为**,核心目标:
  
  - 让 AI **必须通过 MCP 查询真实数据库**
  - 让接口测试 **必须验证数据库结果**
  - 让统计 / 报表 **必须跑真实 SQL**
  - 让用户直接问“数据是多少”时,AI **自动查库而不是反问**
  
  > 本 Skills 属于:**执行型 + 验证型 + 数据治理型 Skills**  
  > 目标:**杜绝 AI 编数据、假验证、只写 SQL 不执行的问题**
  
  ---
  
  ## 二、何时必须使用本 Skills(触发规则)
  
  只要满足以下任一条件,**AI 必须使用 MCP 数据库工具**
  
  ### 1️⃣ 接口测试场景(新增 / 编辑 / 删除 / 状态变更)
  
  当 AI 执行或协助以下接口相关操作时:
  
  - 新增数据(Create / Add)
  - 编辑数据(Update / Edit)
  - 删除数据(Delete / Remove / 作废)
  - 状态变更(启用 / 禁用 / 完成 / 关闭)
  
  #### 强制规则
  
  - ✅ 接口执行完成后,**必须使用 MCP 查询数据库**
  - ✅ 验证数据是否真实新增 / 修改 / 删除
  - ❌ 禁止只根据接口返回值判断成功
  - ❌ 禁止假设数据库已发生变化
  
  > ✔ 正确行为:“接口返回成功 → MCP 查询表 → 对比数据变化”
  
  ---
  
  ### 2️⃣ 统计 / 报表 / 看板 / 聚合接口
  
  包括但不限于:
  
  - 数量统计(会员数、订单数、开单数)
  - 金额统计(开单金额、支付金额、退款金额)
  - 汇总指标(合计、平均值、最大值)
  - 环比 / 同比 / 增长率
  
  #### 强制规则
  
  - ✅ 编写统计 SQL 后,**必须通过 MCP 执行**
  - ✅ 用真实数据验证结果合理性
  - ❌ 禁止“只写 SQL,不执行”
  - ❌ 禁止凭经验推断结果
  
  ---
  
  ### 3️⃣ 用户直接询问业务数据(自动触发)
  
  当用户提问符合以下特征时,AI **必须自动查库**
  
  #### 触发特征
  
  - 包含:`多少 / 数量 / 金额 / 总数 / 合计`
  - 包含明确时间范围:年(如 2026 年)、月(如本月 / 2026-01)、日(如今天 / 昨天)
  - 涉及业务实体:会员 / 订单 / 开单 / 门店 / 员工 / 消耗
  
  #### 示例问题
  
  - 2026 年新增会员数量是多少?
  - 2026 年开单金额是多少?
  - 本月退款总额有多少?
  - 今天新增订单数是多少?
  
  #### 强制规则
  
  - ✅ 自动识别为【数据查询问题】
  - ✅ 直接使用 MCP 查询数据库
  - ❌ 禁止回复“需要查询数据库”
  - ❌ 禁止编造、估算或假设数据
  
  ---
  
  ## 三、MCP MySQL 使用规范
  
  ### 1️⃣ 允许的操作范围
  
  -**只允许**`SELECT`
  -**禁止**`INSERT / UPDATE / DELETE / TRUNCATE`
  
  ---
  
  ### 2️⃣ 表结构查询规范
  
  如需查看表结构,统一使用以下 SQL(将 `<表名>` 替换为实际表名):
  
  ```sql
  SELECT COLUMN_NAME,
         DATA_TYPE,
         IS_NULLABLE,
         COLUMN_KEY,
         COLUMN_DEFAULT,
         EXTRA,
         COLUMN_COMMENT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME = '<表名>';
  ```
  
  **注意事项**
  
  - 查询表结构时**不要加 ORDER BY**
  - **每次查询只针对一个表**
  - 避免一次性发送多条 SQL
  
  ---
  
  ## 四、SQL 查询验证规范(统计类)
  
  对统计类型的 SQL(报表、看板、统计接口),在提交代码前**必须先**用 MCP MySQL 工具执行验证。
  
  ### 验证要求
  
  - [ ] SQL 语法正确,能执行通过
  - [ ] 涉及的表、字段存在且类型匹配
  - [ ] JOIN 关系正确
  - [ ] 统计逻辑与需求一致
  - [ ] 用实际数据跑一遍,结果合理
  
  ### 原则
  
  只有验证通过的 SQL 才能提交到代码中。
  
  ---
  
  ## 五、如何通过 MCP 执行 SQL(配置与调用)
  
  ### 1️⃣ 配置文件位置
  
  - **路径**:项目根目录下 `.cursor/mcp.json`
  - **数据库 MCP 服务名**`my-sql-db`
  
  ### 2️⃣ 当前数据库 MCP 配置说明
  
  本项目中 MySQL MCP 使用 `@davewind/mysql-mcp-server`,连接库为 `lqerp_dev`。配置示例(仅作参考,以实际 `.cursor/mcp.json` 为准):
  
  ```json
  "my-sql-db": {
    "command": "npx",
    "args": ["--yes", "@davewind/mysql-mcp-server", "mysql://用户:密码@主机:3306/lqerp_dev"]
  }
  ```
  
  ### 3️⃣ 执行 SQL 的方式
  
  - **工具名称**:MCP 提供的 **query** 工具(在 Cursor 中可能显示为 `query` 或带服务前缀,如与 `my-sql-db` 相关)。
  - **参数**:传入 **sql**(string),即要执行的 SQL 语句。
  - **限制**:该 MCP 仅支持 **只读**,仅可执行 **SELECT**;所有语句在 READ ONLY 事务中执行,禁止 INSERT/UPDATE/DELETE/DDL。
  
  **调用要点**
  
  1. 在需要查库、验证接口结果或跑统计 SQL 时,直接调用该 MCP 的 query 工具。
  2. 传入的 `sql` 必须是合法的 SELECT 语句,一次一条。
  3. 用返回结果做数据验证或统计核对。
  
  ### 4️⃣ 简单验证示例
  
  - 验证 MCP 连通、可执行 SQL 的示例(在 `lqerp_dev` 下查表数量):
  
  ```sql
  SELECT COUNT(*) AS table_count
  FROM information_schema.tables
  WHERE table_schema = 'lqerp_dev';
  ```
  
  - 查询某表结构(将 `<表名>` 换为实际表名):
  
  ```sql
  SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_COMMENT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'lqerp_dev' AND TABLE_NAME = '<表名>';
  ```
  
  ### 5️⃣ 小结
  
  | 项目       | 说明 |
  |------------|------|
  | 配置       | `.cursor/mcp.json`,服务名 `my-sql-db` |
  | 执行方式   | 调用 MCP 的 **query** 工具,参数 **sql** |
  | 允许操作   | 仅 SELECT |
  | 数据库     | `lqerp_dev` |