~/VibeHandbook
$39

编程语言

iso.org

SQL

是什么

SQL(Structured Query Language,结构化查询语言)是查询和操作关系型数据库的标准语言,适用于 PostgreSQL、MySQL、SQLite 和 SQL Server 等。它是声明式的——你描述想要的结果,由数据库引擎决定如何高效地取出它。

优势

  • 声明式:陈述你想要什么,而非如何逐行遍历。
  • 历经数十年验证,引擎成熟,一致性保障强。
  • 基于集合的操作(连接、聚合、窗口函数)简洁而高效。
  • 可迁移——核心 SQL 在大多数关系型数据库上通用。

权衡取舍

  • 方言各异(Postgres 对比 MySQL 对比 SQLite),因此可移植性并非完全。
  • 很容易写出慢查询;性能取决于索引和查询计划。
  • 它不是通用编程语言——控制流和逻辑写起来别扭。
  • 模式变更(迁移)在生产环境中需要谨慎对待。

何时选用

每当你的数据是关系型的、且按结构查询时就选用 SQL:报表、分析、应用后端,以及任何数据完整性和连接很重要的系统。对于结构化数据上的聚合和临时查询,它是合适的工具,并且几乎可以和任何后端语言搭配使用。

与 vibe coding 的契合度

AI 助手擅长 SQL,能出人意料地把大白话问题翻译成查询,但它们可能会猜测你的模式。指挥 AI 时,把实际的表定义(CREATE TABLE 语句)粘贴进去,并指明你具体使用的数据库(Postgres、SQLite 等),这样它才会使用正确的方言和函数。要求它解释查询,并为慢查询建议索引,同时务必让它对用户输入做参数化,而不是用字符串拼接值——这能防止 SQL 注入。在对生产环境运行之前,先在小样本上验证生成的查询。

SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.active = true
GROUP BY u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC;