SQL

你可能会说

我想查出“最近 7 天下单的用户”,那句话怎么写?

后端或数据库工具用来查找和修改关系型数据的语言例如,管理员筛选所有未付款订单时,后端会用 SQL 从订单表中查出结果。修改或删除数据前必须确认影响范围,用户输入也不能直接拼进 SQL 命令。
也常被叫作SQL 查询结构化查询语言
SELECT name, city FROM users WHERE city = '深圳'
id名字城市
1小狸深圳
2阿机杭州
3小林上海

什么时候用

  • 先学会用 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 时提供表结构,并要求它解释查询与修改范围
    把表结构一起交给 AI
    users.iduuidusers.emailtext · unique输出解释影响几行

什么时候不用

  • DELETE 缺少 WHERE 时会删除表中所有行;执行前必须确认范围并准备恢复方案
    少了 WHERE 的删除
    执行DELETE FROM users 影响12,480 行被删除
  • 不要把表单内容直接拼进 SQL,这会产生 SQL 注入风险
    把输入直接拼进 SQL
    email = ' 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 数据库
数据组织用表保存结构化记录,并通过字段关联不同表中的数据按文档、键值、列族或图等不同模型组织数据
判断重点需要多表关联、字段约束和事务时,通常更直接数据模型和访问方式很明确时,可选择针对该模式设计的产品
适用场景订单、账户和其他关系明确、需要一致性的业务数据键值缓存、文档内容、事件记录或图关系等特定场景
延伸阅读 · 权威出处