SQL
你可能会说
我想查出“最近 7 天下单的用户”,那句话怎么写?
后端或数据库工具用来查找和修改关系型数据的语言例如,管理员筛选所有未付款订单时,后端会用 SQL 从订单表中查出结果。修改或删除数据前必须确认影响范围,用户输入也不能直接拼进 SQL 命令。
先知道
也常被叫作SQL 查询结构化查询语言
什么时候用
- 先学会用 SELECT、FROM 和 WHERE 查询目标数据,并检查返回结果先学会读数据查询SELECT * FROM users WHERE id = 42 → 结果42 · 小林
- 修改或删除前,先用相同的 WHERE 条件执行 SELECT,确认影响范围删改前先预览影响范围SELECT ... WHERE id=42→确认 1 行→DELETE
- 使用参数化查询,让用户输入作为数据传入,而不是拼进 SQL 命令输入只作为数据SELECT * FROM users WHERE email = $1$1 = "oil@example.com"参数不会被当作另一段 SQL 执行
- 让 AI 编写 SQL 时提供表结构,并要求它解释查询与修改范围把表结构一起交给 AIusers.iduuidusers.emailtext · unique输出解释影响几行
什么时候不用
- DELETE 缺少 WHERE 时会删除表中所有行;执行前必须确认范围并准备恢复方案少了 WHERE 的删除执行DELETE FROM users → 影响12,480 行被删除
- 不要把表单内容直接拼进 SQL,这会产生 SQL 注入风险把输入直接拼进 SQLemail = ' OR 1=1 --SELECT * FROM users WHERE email = '' OR 1=1
- 不要在生产数据库中边猜边试;先在测试数据或事务中验证未确认条件就在生产库执行写操作当前环境PRODUCTION准备执行UPDATE users ...先在测试数据或事务中验证
- 不要只设计展示文案,还要为数据定义稳定标识和合适字段类型展示文字不能代替稳定字段只存“高级会员” → 应该plan_id: pro_2026
组成结构 · Anatomy
SELECT name FROM users WHERE city = ?id名字城市
1小狸深圳
SELECT、INSERT、UPDATE 或 DELETE,决定要读取还是修改
要操作的关系型数据集合;先确认表名和字段结构
WHERE 限定影响范围;问号等占位符由参数化查询安全传值
常见变体 · Variants
查询SELECT
SELECT读出匹配的行
读取记录,不修改数据
新增INSERT
INSERT加一行新记录
创建一条新记录
修改UPDATE
UPDATE改 WHERE 命中的行
更新指定记录,必须看 WHERE
删除DELETE
DELETE删 WHERE 命中的行
删除指定记录,先确认可恢复
典型使用场景
查询用户列表
查询用户SELECT 找到符合条件的记录
SELECT id, name, planFROM usersWHERE plan = 'pro';
结果:u_23 · 林小狐 · pro
新增一条任务
新增任务INSERT 创建一条记录
执行INSERT INTO tasks ...
→
返回id = task_8842
更新个人资料
更新资料UPDATE 只修改指定用户
UPDATE usersSET city = '深圳'WHERE id = 'u_23';
影响 1 行 · 修改成功
按 id 删除一条记录
删除记录DELETE 前先确认 WHERE
SELECT WHERE id=t_42→确认 1 行→DELETE
避免误删整张表
SQL 和 NoSQL 有什么区别?
SQL 是查询语言;实际选型是在关系型数据库与某种具体的 NoSQL 数据库之间比较。重点看数据关系、访问方式和一致性要求,不是简单判断谁更快。
| 对比维度 | 关系型数据库(SQL) | NoSQL 数据库 |
|---|---|---|
| 数据组织 | 用表保存结构化记录,并通过字段关联不同表中的数据 | 按文档、键值、列族或图等不同模型组织数据 |
| 判断重点 | 需要多表关联、字段约束和事务时,通常更直接 | 数据模型和访问方式很明确时,可选择针对该模式设计的产品 |
| 适用场景 | 订单、账户和其他关系明确、需要一致性的业务数据 | 键值缓存、文档内容、事件记录或图关系等特定场景 |
延伸阅读 · 权威出处