切换·Esc 返回

SQL 查询SQL

数据与账号
用专门语句从表格型数据库中查找或修改数据

SQL 用来读取、新增、修改和删除关系型数据库里的数据。新手先理解 SELECT、INSERT、UPDATE、DELETE 和 WHERE;执行外部输入时必须使用参数化查询,避免直接拼接。

SELECT name, city
FROM users
WHERE city = '深圳';

什么时候用

  • 先会 SELECT + FROM + WHERE,能读懂查询结果就已经很有用
    先学会读数据
    查询SELECT * FROM users WHERE id = 42 结果42 · 小林
  • 修改或删除前,先用同一个 WHERE 执行 SELECT 看会影响谁
    删改前先预览影响范围
    SELECT ... WHERE id=42确认 1 行DELETE
  • 使用参数化查询,让用户输入只当数据、不当命令
    输入只作为数据
    SELECT * FROM users WHERE email = $1$1 = "oil@example.com"
    参数不会被当作另一段 SQL 执行
  • 让 AI 写 SQL 时同时提供表结构,并要求解释影响范围
    把表结构一起交给 AI
    users.iduuidusers.emailtext · unique输出解释影响几行

什么时候不用

  • DELETE FROM users 忘写 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 ...
    先在测试数据或事务中验证
  • 只保存展示文案,不设计稳定 id 和字段类型
    展示文字不能代替稳定字段
    只存“高级会员” 应该plan_id: pro_2026
组成结构 · Anatomy
SELECTname FROMusersWHEREcity = ?
1操作ActionSELECT、INSERT、UPDATE 或 DELETE,决定要读取还是修改
2Table要操作的关系型数据集合;先确认表名和字段结构
3条件ConditionWHERE 限定影响范围;问号等占位符由参数化查询安全传值
常见变体 · Variants
查询SELECT
SELECT * FROM posts
读取记录,不修改数据
新增INSERT
INSERT INTO posts ...
创建一条新记录
修改UPDATE
UPDATE posts SET ... WHERE id = ?
更新指定记录,必须看 WHERE
删除DELETE
DELETE FROM posts WHERE id = ?
删除指定记录,先确认可恢复
典型使用场景
查询用户列表
查询用户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
避免误删整张表