游乐游手机版
首页/AI教程/文章详情

Claude Code乱猜字段名?我编写一个数据库查询约束Skill实战教程

时间:2026-07-01 15:07
针对AI在数据库查询中乱猜字段名的问题,设计了一套六步数据库查询约束规则,要求AI必须先查表结构、数据量、检查索引,经用户确认后再执行,并将结果存入知识库。该方法有效消除字段名猜测错误,拦截慢查询,减少纠正次数。

被 Claude Code 气到的一天

事情是这样的。

Claude Code 乱猜字段名?我给它写了一个数据库查询约束 Skill

用 Claude Code 查一张保单表的数据,想看一下最近一个月的退保记录。指令很简单:

Claude 很积极,唰唰唰生成了一段 SQL:

SELECT id, policy_no, created_at, surrender_amount, status FROM policy_surrender WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY);

看起来挺对,对吧?

但执行直接报错。

created_at 字段不存在。这张表里记录创建时间的字段叫 create_time

纠正它:"字段名是 create_time,不是 created_at。"

Claude 说"抱歉,我修改一下",然后重新生成:

SELECT id, policy_no, create_time, surrender_amount, status FROM policy_surrender WHERE create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY);

这次字段名对了,但执行又报错。

surrender_amount 不存在。这张表存的是退保金额,但字段名是 refund_amount

再次纠正。Claude 再次道歉,再次修改。然后 status 也不存在,实际字段叫 surrender_status

三个字段,它猜错了三个。

更要命的是,它完全没有"查一下表结构再写 SQL"的意识。它就像那种刚入职的实习生,听了需求就开始敲代码,完全不看数据库文档。

为什么 AI 会"瞎猜"?

这个问题不只是 Claude Code 有,Kimi、DeepSeek、GPT 都一样。

根本原因是:AI 的"常识"和数据库的"实际字段名"是两回事。

AI 见过无数的代码和数据库设计,它"知道"记录创建时间的字段通常叫 created_atcreate_timegmt_createcreated_date…… 所以当它看到"查一张表"的指令时,它会从自己的经验库里选一个最"常见"的字段名。

问题是,你的数据库字段名不一定按"常见"来命名。

比如保险行业的系统,很多字段命名有自己的历史包袱:

  • 有的字段叫 create_time(标准中文拼音风)
  • 有的叫 crt_tm(缩写风)
  • 有的叫 createdAt(驼峰风)
  • 甚至有的叫 c_time(极简风)

AI 猜中的概率,大概是 1/4 到 1/6。而在一个复杂查询里涉及 5-10 个字段,它全猜对的概率……你自己算。

更可怕的是,AI 不会告诉你"我在猜" 。它生成 SQL 的时候语气极其自信,就像真的查过表结构一样。你只有执行报错后才知道它在瞎蒙。

解法:给 Claude 写了一个 6 步 Skill

被反复折磨后,决定不再每次都纠正它。给它写了一个数据库查询 Skill,把它变成一个"有规矩的实习生"。

这个 Skill 的核心思想很简单:在写任何 SQL 之前,必须先查表结构。 就像老程序员带新人时说的:"先别急着写代码,先看看表里有啥字段。"

6 步流程

用户查询需求 → 第1步:查表结构 → 第2步:查数据量 → 第3步:判断范围 → 第4步:生成SQL+检查索引 → 第5步:用户确认 → 第6步:执行并保存知识库

第1步:查表结构(最关键)

Claude 必须先执行:

DESCRIBE policy_surrender;-- 或SHOW COLUMNS FROM policy_surrender;-- 或(PostgreSQL)SELECT column_name, data_type, column_comment FROM information_schema.columns WHERE table_name = 'policy_surrender';

然后把结果展示给用户。不是偷偷摸摸看,是明明确确展示。

第2步:查数据量

在生成 SQL 之前,先查这张表的数据量:

SELECT COUNT(*) FROM policy_surrender;

第3步:判断范围,防止慢查询

如果数据量超过 10 万(这个阈值自己定),必须暂停。

Claude 要这样告诉用户:

不是直接执行,是先问。

第4步:生成 SQL,并检查索引

Claude 根据表结构生成 SQL,然后自己检查 WHERE 条件是否命中索引:

EXPLAIN SELECT * FROM policy_surrender WHERE create_time >= '2025-05-01';

如果 EXPLAIN 显示 type 是 ALL(全表扫描),Claude 必须警告用户:

第5步:用户确认

Claude 把生成的 SQL 展示给用户,等用户确认后再执行。不是自作主张点运行。

第6步:保存知识库

查询完成后,Claude 把这张表的表结构、字段含义、数据量、索引信息,保存到项目知识库。

下次用户再查这张表,Claude 可以直接读取知识库,不用再执行 DESCRIBE。

Skill 写成什么样?

Claude Code 支持 project-specific 的 Skill(在 .claude/skills/ 目录下)。Skill 文件长这样:

# 数据库查询 Skill## 约束规则​
当用户要求查询数据库时,必须严格遵守以下流程:​
### 1. 查表结构
- 执行 `DESCRIBE {table_name}``SHOW COLUMNS FROM {table_name}`
- 将结果展示给用户
- 不准猜测字段名,必须基于实际表结构​
### 2. 查数据量
- 执行 `SELECT COUNT(*) FROM {table_name}`
- 如果数据量 > 100000,暂停执行,提示用户缩小范围​
### 3. 判断范围
- 询问用户是否需要加 WHERE 条件
- 提供时间范围、ID 范围等建议​
### 4. 生成 SQL + 检查索引
- 根据表结构生成 SQL
- 执行 `EXPLAIN` 检查索引命中情况
- 如果全表扫描,警告用户​
### 5. 用户确认
- 展示 SQL,等待用户确认
- 未经确认不准执行​
### 6. 保存知识库
- 将表结构信息保存到 `.claude/knowledge/db/{table_name}.md`
- 格式:字段名 | 类型 | 含义 | 索引
- 下次查询同一表时,优先读取知识库​
## 禁止行为- 禁止猜测字段名
- 禁止不查表结构直接写 SQL
- 禁止不检查索引就执行大数据量查询
- 禁止未经用户确认执行 SQL​
## 示例​
用户:查一下 policy_surrender 表最近 30 天的数据​
正确流程:
1. DESCRIBE policy_surrender → 展示字段
2. SELECT COUNT(*) → 判断数据量
3. 询问用户:是否需要加时间范围?建议按 create_time 查询
4. 生成 SQL:SELECT * FROM policy_surrender WHERE create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY)
5. EXPLAIN 检查索引
6. 展示 SQL,等待确认
7. 执行并保存知识库

实际效果如何?

Skill 上线后,Claude 的行为明显变了。

以前:

查一下 policy_surrender 表最近 30 天的数据
Claude:(直接生成 SQL,3 个字段名全猜错)

现在:

查一下 policy_surrender 表最近 30 天的数据
Claude:我先查一下这张表的表结构。(执行 DESCRIBE,展示结果)
这张表有 120 万条数据,建议加时间范围。你想按 create_time 查最近 30 天吗?
(确认后,生成 SQL,EXPLAIN 检查索引,展示出来)
这是 SQL,确认执行吗?
(确认后,执行)
结果已保存到知识库,下次查这张表不用重复查结构。

不只是字段名不再猜错,更大的好处是:

  1. 慢查询被拦截了:有几次差点执行全表扫描,Claude 提醒后加了索引条件
  2. 知识库积累了:项目里 30 多张核心表的结构都被记录下来了,新同事问"这个字段什么意思"直接查知识库
  3. 不再需要纠正它:它自己知道规矩,省了很多口舌

当然,偶尔还是会遇到复杂场景需要人工干预。比如字段名特别模糊、中英文混杂、或者业务含义和字面意思差很远的时候,Claude 看了表结构还是可能理解歪。这时候就直接告诉它正确答案,然后让它更新知识库——"人工干预→积累知识库→下次不用重复犯错",这个闭环跑起来后,越来越顺手。

其他 AI 工具也能用吗?

这个 Skill 本质上是一套约束规则,不是 Claude 特有的。

后来把它改成了 Prompt 模板,在 Kimi、DeepSeek 上也能用:

你是一个数据库查询助手。当用户要求查询数据库时,必须按以下步骤执行:​
1. 先执行 DESCRIBE {table_name},展示表结构
2. 执行 SELECT COUNT(*) FROM {table_name},判断数据量
3. 数据量超过10万时,提示用户缩小范围
4. 根据表结构生成SQL,执行EXPLAIN检查索引
5. 展示SQL,等待用户确认
6. 执行并保存表结构信息​
禁止猜测字段名。禁止未经确认执行SQL。

效果类似,但不如 Claude Code 的 Skill 那么"自动化"——因为 Kimi 和 DeepSeek 没有直接执行 SQL 的能力,需要手动复制粘贴。但约束规则本身是有用的,至少它不会乱猜字段了。

只在 Claude Code 上深度用这个 Skill,因为它能即时反馈、直接执行 SQL、还能自动优化 Skill 本身。其他工具主要用来生成思路和初稿。

写在最后

这件事最大的启发是:用 AI 不是"给它自由",而是"给它规矩"。

AI 的创造力是双刃剑。它敢猜、敢试、敢犯错,但数据库查询这个场景,"敢猜"就是灾难。一个好的 Skill 不是限制 AI,而是帮它建立在这个场景下的正确工作习惯。

就像带实习生一样:你不在旁边盯着的时候,它会不会老老实实先看文档再写代码?不会的,除非你反复训练,直到它养成肌肉记忆。

Claude Code 的 Skill 机制,就是给 AI 建肌肉记忆的工具。

如果你也被 AI 乱猜字段名气到过,建议试试这个 6 步流程。花 10 分钟写一个 Skill,以后省下的纠正时间远不止 10 分钟。

来源:https://juejin.cn/post/7656596075147460648
上一篇用Codex和Obsidian制作人生副本视频 输入文案直达剪映草稿 下一篇码农AI翻身系列第五篇:Transformer全面基础入门介绍
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
RAG四标融合企业知识资产体系四库协同GEO优化实践
AI教程 · 2026-07-01

RAG四标融合企业知识资产体系四库协同GEO优化实践

生成式AI正在彻底改写信息检索的底层逻辑。传统SEO依赖关键词堆砌和外链建设的策略,在大模型的内容采信规则下已经基本失效。取而代之的,是生成式引擎优化(GEO)。它不再关注外链数量,而是重点衡量你的知识是否结构化、证据链是否坚实、信源是否可靠——这些维度才是RAG(检索增强生成)架构真正看重的核心指

一个普通上班人分享WorkBuddy使用心得与真实体验
AI教程 · 2026-07-01

一个普通上班人分享WorkBuddy使用心得与真实体验

前言 最近我开始使用WorkBuddy——这是腾讯推出的一款AI办公工作台。差不多用了一周时间,趁印象还新鲜,把真实的使用感受记录下来,给还在犹豫的朋友做个参考。不吹不黑,只说实际体验。 初印象:不只是聊天机器人 之前用过不少AI工具,大多数就是个对话框,你问它答,答完就结束了。WorkBuddy不

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录
AI教程 · 2026-07-01

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录

先讲一个颇具戏剧性的开端。 这件事的开端颇显荒诞——有用户前来咨询,称AI Pro版的介绍中提到我们有一款“视频录制拓展”。团队全体成员都感到困惑,翻遍产品列表,发现根本不存在该组件。AI那种“一本正经胡说八道”的能力,这次确实让我们陷入尴尬。 按常理,此事到此便可结束——一句“抱歉,暂时没有这个拓

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同
AI教程 · 2026-07-01

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同

OLAP和SQL-on-Hadoop虽都使用SQL查询数据,但本质不同。SQL-on-Hadoop负责海量数据批量计算与ETL,查询速度秒级至分钟级;OLAP通过预聚合实现毫秒级多维分析,适合BI报表。两者在数据平台分工协作,前者是后厨加工,后者是前台快速服务。

GEO优化深度解析:AI偏好FAQ还是长文内容?
AI教程 · 2026-07-01

GEO优化深度解析:AI偏好FAQ还是长文内容?

在GEO优化中,AI对内容形式无统一偏好:FAQ在简单查询中引用率41%,长文在复杂查询中达58%。内容应基于用户意图选择形式,FAQ适配简单事实类问题,长文建立主题权威,两者互补而非替代。