多数据库SQL查询、优化、schema设计与数据分析,支持MySQL/PostgreSQL/SQLite/SQLServer。免费版
SQL查询助手(免费版)是一项面向实际任务的技能,主要用于SQL查询与数据库操作辅助引擎,支持MySQL、PostgreSQL、SQLite、SQLServer,覆盖自然语言转SQL、性能优化与Schema设计;Agent平台 : 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等);
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
SQL查询与数据库操作辅助引擎,支持MySQL、PostgreSQL、SQLite、SQLServer,覆盖自然语言转SQL、性能优化与Schema设计。
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
需要配置对应API Key,详见上文环境配置章节
API Key配置方式:
export API_KEY="your_api_key_here"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统。
将自然语言问题转换为SQL查询,自动适配目标数据库方言:
-- MySQL: 查找过去30天消费超1000的VIP用户 SELECT u.user_id, u.name, SUM(o.amount) AS total_spent FROM users u JOIN orders o ON u.user_id = o.user_id WHERE u.is_vip = 1 AND o.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY u.user_id, u.name HAVING total_spent > 1000;
支持的方言差异自动处理:
NOW()/CURRENT_TIMESTAMP/GETDATE()LIMIT OFFSET/FETCH NEXTCONCAT()/||/+AUTO_INCREMENT/SERIAL/IDENTITY分析SQL查询性能并提供优化建议:
输入: 用户提供数据库Schema设计所需的指令和必要参数。 处理: 按照skill规范执行数据库Schema设计操作,遵循单一意图原则。
ROW_NUMBER()/RANK()/LAG()/LEAD()/SUM() OVER()GROUP BY/HAVING/ROLLUP/CUBE输入: 用户提供复杂分析查询所需的指令和必要参数。 输出: 返回复杂分析查询的执行结果,包含操作状态和输出数据。
本skill还覆盖以下能力场景: 多数据库、设计与数据分析、PostgreSQL、SQLite、SQLServer、免费版、查询与数据库操作、辅助引擎、核心能力、种数据库方言、查询性能分析与索、引优化建议、设计与、递归查询。这些能力在上述核心功能中均有对应处理逻辑。
执行结果以Markdown格式返回,包含操作状态(成功/失败)、处理摘要和具体输出数据。失败时返回错误码和错误信息,便于定位问题。
| 场景 | 输入 | 输出 |
|---|---|---|
| 查询生成 | 自然语言问题+表结构 | 可执行SQL+方言适配 |
| 性能调优 | 慢查询SQL+表数据量 | EXPLAIN分析+优化建议+重写SQL |
| Schema设计 | 业务需求描述 | 表结构DDL+索引策略+ER图 |
| 数据分析 | 分析维度+指标 | 窗口函数/CTE查询+结果解读 |
不适用于:数据库运维(备份/主从配置)、NoSQL查询、数据库安全审计。
-- PostgreSQL: 计算每个用户消费的环比增长率
WITH monthly_spending AS (
SELECT
user_id,
DATE_TRUNC('month', created_at) AS month,
SUM(amount) AS total
FROM orders
WHERE created_at >= NOW() - INTERVAL '6 months'
GROUP BY user_id, month
)
SELECT
user_id,
month,
total,
LAG(total) OVER (PARTITION BY user_id ORDER BY month) AS prev_month,
ROUND(
(total - LAG(total) OVER (PARTITION BY user_id ORDER BY month))
/ LAG(total) OVER (PARTITION BY user_id ORDER BY month) * 100,
2
) AS growth_rate_pct
FROM monthly_spending
ORDER BY user_id, month;
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
ERROR 1146: Table doesn't exist |
表名拼写错误或未选择数据库 | 检查表名大小写(Linux下MySQL区分大小写),执行 SHOW TABLES; 确认表存在,执行 USE database_name; 选择数据库 |
ERROR 1052: Column 'id' in field list is ambiguous |
JOIN多表存在同名字段未指定表前缀 | 为所有字段添加表别名前缀,如 SELECT u.id, o.id FROM users u JOIN orders o |
| 查询超时或极慢 | 缺少索引或全表扫描大数据量 | 执行 EXPLAIN 检查执行计划,为WHERE/JOIN条件添加索引,避免 SELECT *,考虑分页查询 |
ERROR 1064: Syntax error |
SQL语法错误或方言不兼容 | 根据目标数据库方言调整语法,如MySQL用反引号 ` 包裹保留字,PostgreSQL用双引号 " |
开始查询前明确目标数据库类型。引擎自动处理方言差异:日期函数(MySQL DATE_SUB() vs PostgreSQL INTERVAL)、分页(MySQL LIMIT offset, count vs SQLServer OFFSET FETCH)、字符串函数(CONCAT() vs ||)。如果不确定目标数据库,默认生成标准SQL,标注需要按方言调整的部分。
重点关注:type(访问类型,ALL为全表扫描需优化,ref/eq_ref为索引查找)、key(实际使用的索引,NULL表示未用索引)、rows(预估扫描行数,越少越好)、Extra(Using filesort和Using temporary表示需要额外排序/临时表,通常需优化)。优化目标是将type从ALL提升到ref或更高,减少rows。
联合索引(a, b, c)仅支持以下查询前缀:a、a,b、a,b,c。单独查询b或c无法使用该索引。设计联合索引时,将选择性最高的列放最前面(如WHERE status='active'比WHERE created_at>'2024-01-01'选择性高),范围查询列放最后(范围查询后的列无法走索引)。
本免费版提供基础功能。升级到完整版 sql 获取全部能力和高级特性。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.6万人学习
共89课时 | 133.1万人学习
共49课时 | 82.1万人学习