☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
必须人工提供完整表结构、外键关系、时间格式和数据库方言,否则deepseek生成的sql易报错或结果错误;需按四步操作:贴create table语句、用三段式明确任务约束、注入目标方言语法模板、检查字段前缀/group by/时间函数。
要用deepseek生成一条能直接在数据库里执行的sql查询语句,必须人工把表结构、字段含义、外键关系、时间格式、数据库方言全写清楚,缺任何一项都可能生成报错语句或查出错误数据。
第一步:提供完整且准确的表结构信息
DeepSeek不连接你的数据库,不会自动读取表名和字段。你得把CREATE TABLE语句原样贴进去,一个字都不能少。
打开你的数据库管理工具(如DBeaver、Navicat或命令行),执行.schema users orders(SQLite)或SHOW CREATE TABLE users;(MySQL),复制输出结果。
粘贴到提示词最开头,用```sql包裹,例如:
```sql<br>CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, phone VARCHAR(20), reg_time DATETIME);<br>CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, amount DECIMAL(10,2), order_time DATETIME);<br>```
【orders.user_id → users.id 这条外键路径必须单独写明,否则DeepSeek大概率用 orders.id = users.id 错误关联】
第二步:用三段式指令明确任务、约束与输出格式
自然语言描述越模糊,生成的SQL越不可靠。“查活跃用户”这种说法DeepSeek根本没法翻译成WHERE条件。
方法一:标准三段式(推荐)
【任务】检索2024年5月下单金额超过500元的北京用户姓名、手机号、订单数。
【输入约束】仅使用 users 和 orders 表;用户地区以 users.city 字段为准;时间字段统一用 order_time;orders.user_id 是外键,引用 users.id。
【输出要求】只输出一条可执行 SELECT 语句,关键字大写,字段加反引号,不带任何解释、不加 ```sql 标记、不换行。
方法二:分步引导(适合复杂查询)
先让模型列出涉及的表和字段→再让它写出SELECT和FROM子句→最后补上WHERE、GROUP BY和聚合函数。这能避免漏掉GROUP BY导致MySQL 8.0+直接报错。
注意:如果输出里出现```sql包裹或带中文注释,说明【输出要求】没写够硬,要加上“禁止Markdown、禁止自然语言、禁止空行”。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
第三步:注入目标数据库的SQL语法模板
DeepSeek不会猜你用的是MySQL还是PostgreSQL。“取年份”在MySQL是DATE_FORMAT(order_time, '%Y'),在PostgreSQL必须写EXTRACT(YEAR FROM order_time),混用必报错。
在提示词中插入一行明确声明:
“使用 MySQL 8.0 语法,时间字段为 DATETIME 类型,禁止使用窗口函数和CTE。”
紧接着贴1~2个严格格式的样例,比如:
SELECT u.`name`, u.`phone`, COUNT(o.`id`) AS `order_count`
FROM `users` AS u
INNER JOIN `orders` AS o ON u.`id` = o.`user_id`
WHERE YEAR(o.`order_time`) = 2024 AND u.`city` = '北京'
GROUP BY u.`id`, u.`name`, u.`phone`;
这一步做完,把自然语言需求放在样例之后,用“--- 以上为示例,以下为待处理问题:”隔开。
第四步:检查并修正易错点
生成结果出来后,立刻盯住三个地方:
① 所有字段是否都带了表别名前缀?两个表都有id时,必须写成u.id和o.id,不能只写id;
② GROUP BY子句是否包含SELECT里所有非聚合字段?漏掉就会触发MySQL严格模式报错;
③ 时间函数是否匹配你声明的方言?看到TO_DATE却声明了MySQL,马上删掉重问。
如果发现字段名拼错(比如把reg_time写成create_time),说明第一步的表结构没贴准,回去核对原始CREATE TABLE语句。
这一步做完,SQL语句就可直接复制进数据库客户端执行。










