SQL
SQL也常被叫作:查询语句SQL 语句数据库查询写数据库的语句
「跟数据库说话用的语言,就四句:查(SELECT)、加(INSERT)、改(UPDATE)、删(DELETE)。」
SQL SQL
操作关系型数据库的标准语言:查、加、改、删各一句话,一句 SQL 就是一次对数据的操作。
数据库是仓库,SQL 是你对仓库管理员说的话。「SELECT name FROM users WHERE age > 18」是「把年龄大于 18 的用户的姓名给我」。它不需要你会编程:你能说清「要哪些字段、什么条件、怎么排序」,就离一句 SQL 不远了。你平时让 AI 干的数据活儿,翻译过来基本都在查、加、改、删这四类里。
SQL 不区分大小写(习惯上关键字大写),最常见的查询长这样:SELECT 字段 FROM 表 WHERE 条件 ORDER BY 排序 LIMIT 数量。危险的是 DELETE:DELETE FROM users 不带 WHERE 会删掉整张表的所有行,没有后悔药(除非有备份)。AI 写 SQL 的典型错误不是语法错——语法错会直接报错——而是语法对但结果不对:条件拼错字段、忘了 LIMIT 一次拉全表把服务器拖垮、统计口径和你想要的不一样。
怎么验收:让 AI 写 SQL,别只看语句漂不漂亮,让它在测试库或本机真实执行一遍,把返回贴出来:行数、每一行内容,对着你的预期数。改数据的操作(UPDATE / DELETE)验收标准是「执行前能说出会动哪些行,执行后能贴出受影响的行数」。凡是说「删成功了」却不给删了几条的,都当没删处理。
长什么样 真实可交互,不是截图
-- 查:年龄大于 18 的用户,最近注册在前,最多 10 条 SELECT name, email FROM users WHERE age > 18 ORDER BY created_at DESC LIMIT 10; -- 删:没有 WHERE 会清空整张表 DELETE FROM users; -- 不要在生产库这么写 DELETE FROM users WHERE id = 5; -- 只删这一条
上面两句 DELETE 差别巨大:没 WHERE 是清空全表,带 WHERE 只动一行。改数据的 SQL,先看会命中哪些行再执行。
拆开看,里面有这几块
-
1
查询 SELECT SELECT
从表里取数据:要哪些字段、哪个表、什么条件、怎么排序、取多少条。
-
2
条件 WHERE WHERE
过滤条件,只对符合条件的行生效。漏写 = 作用于整张表。
-
3
排序与限量 ORDER BY / LIMIT
ORDER BY 控制顺序,LIMIT 控制条数。忘了 LIMIT,一次可能拉出几百万行。
-
4
增改删 INSERT / UPDATE / DELETE
加一行、改几行、删几行。DELETE 和 UPDATE 不带 WHERE 是全表生效,最危险。
常见的有哪几种
只读,不改变数据。最安全,也是用得最多的。
用在:取列表、查详情、做统计
往表里加一行。
用在:注册用户、发帖子
改已有行的字段值,通常要带 WHERE。
用在:改昵称、改订单状态
删行。不带 WHERE 清空全表,删了不可恢复。
用在:删用户、删过期记录,执行前先备份
容易搞混?这样区分
SQL 是一门语言,用来操作关系型数据库(MySQL、PostgreSQL、SQLite 都认它);NoSQL 数据库(如 MongoDB)用的是另一套查询方式,不叫 SQL。说「SQL 数据库」通常指关系型数据库。
看 SQL 与 NoSQL什么时候用得上
「最近 10 个注册用户」= SELECT 字段 FROM users ORDER BY created_at DESC LIMIT 10。
「这个月新增多少用户」= 数满足日期条件的行数,看返回的数字别信转述。
删过期记录前,先跑一条同条件 SELECT 看会命中多少行,再决定删不删。
你可以这样跟 AI 说
直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。
【任务】写一条查询,统计 [口径描述,如「本月新增的注册用户数」] 【范围】只写查询语句,不改数据库结构,不动任何数据 【目标】给我能直接执行的 SQL,并说明它查的是什么、会返回什么 【边界】如果是改数据(UPDATE / DELETE),先在同样条件下跑 SELECT 给我看会命中哪些行;不要用 SELECT * 全字段全表拉取;不要在生产库直接执行 【交付】 1. 完整 SQL 语句 2. 在 [测试库/本机] 真实执行一遍,贴出原始返回:行数 + 每行内容(或统计数字),不要转述 3. 说明统计口径:比如「本月」是按注册时间还是别的字段、时区怎么算 【提醒】执行结果和我预期不符时,先检查条件,不要直接改数据
「贴出原始返回而不是转述」是关键:SQL 最常见的错是语法对但结果不对,只有看到真实返回才能发现口径错了。
它说「做好了」,你怎么自己验
这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「运行时」这层:真的跑起来了,能在本机看到结果。
要亲眼看到这些,才算数
- 让 AI 写一条查询,在测试库或本机真实执行,把原始结果贴出来(行数 + 每行内容),不是转述「查到了」。
- 自己对着结果数:比如查「年龄大于 18 的」,数返回行数、看字段值,和预期对得上。
- 给一个边界条件:比如查「今天注册的用户」,确认它用的日期口径和你一致,结果包含今天的。
- 涉及 DELETE / UPDATE:执行前先让它在同样条件下跑一条 SELECT,贴出会命中多少行;执行后贴出受影响行数。
- 确认查询跑在测试库而不是生产库(如果这是生产环境的话)。
它常这么糊弄你
- 「SQL 已写好,你直接用」——但没执行过,字段名拼错、表名写错,跑一次就报错。要求「先执行给我看」。
- 「已删除成功」——但不给删了几条、删的是哪些。要求贴受影响行数和删除前的命中查询。
- DELETE 没写 WHERE 或写错条件,一次删了不该删的,然后说「应该没问题」——删除没有 Ctrl+Z。
- 用 SELECT * 拉全表所有字段,声称「数据都取到了」——数据量一大,服务器就卡。
SQL 能验到「运行时」层:真实执行看结果。但「在生产库执行」是另一层:需要备份、先看影响行数、最好先在测试库验证。改数据的 SQL 按「执行前命中行数 + 执行后受影响行数」双份证据验收。
考考你 选一个你觉得对的
AI 说「数据删掉了,已处理」。你最好的下一句是?
删除类操作要双份证据:执行前同条件 SELECT 证明「知道会删哪些行」,执行后受影响行数证明「真删了且数量对」。C 问得对但晚了——如果没有备份,恢复本身就是大问题,得先预防。