什么是 SQL?数据库语言简单讲解
SQL(结构化查询语言,读作“S-Q-L”或“sequel”)是操作关系型数据库的标准语言。关系型数据库以表格的形式存储数据,表中有行和列,例如 Postgres、MySQL、SQLite 和 SQL Server。你用 SQL 向数据提问(“本月有哪些客户预约了?”),也用它添加、修改或删除记录。它从 20 世纪 70 年代就已出现,是国际标准,支撑着全世界相当大一部分应用。
用 AI 构建时,SQL 为什么重要
当你请 AI 应用构建工具“保存订单”或“显示即将到来的预约列表”时,必然有某个东西需要与数据库通信。在大多数应用中,这就是 SQL,要么直接编写,要么由 ORM 生成。
你不需要自己写 SQL,但了解一点会很有帮助:
- 你可以检查自己的数据。 一条简短的查询就能回答“本周新注册了多少人?”,比构建一个新页面更快。
- 你可以要求更好的报表。 “按月份和服务分组统计收入”就是一个 SQL 概念。了解这一点,你的请求会更清楚。
- 你可以发现危险的改动。 没有
WHERE子句的DELETE或UPDATE会影响每一行。这在执行之前就值得留意。 - 你的数据不会被锁定。 SQL 是一个共享的标准,因此 SQL 数据库中的数据可以被许多工具迁移和读取。
日常类比
想象一个组织得非常好的图书馆,里面有一位只会说精确而简单语言的图书管理员。
你不必自己去逛书架。你把一张卡片递给管理员:“找出这位作者在 2010 年之后出版的所有书,最新的排在前面。”管理员对整座建筑了如指掌,会把正好符合要求的书按顺序拿回来。
SQL 就是那张卡片上的语言。你说的是要什么,而不是怎么找——数据库会自己找出最快的路径。
SQL 如何工作:表、行和列
关系型数据库把数据存放在表中。每张表存放一类事物,每一行是一条记录,每一列是一项信息:
customers(客户)
| id | name | city | |
|---|---|---|---|
| 1 | Lena Ortiz | lena@example.com | Lisbon |
| 2 | Sam Patel | sam@example.com | Leeds |
orders(订单)
| id | customer_id | total | placed_at |
|---|---|---|---|
| 101 | 1 | 42.00 | 2026-09-20 |
| 102 | 2 | 18.50 | 2026-09-22 |
| 103 | 1 | 25.00 | 2026-09-27 |
customer_id 列把每个订单与一位客户联系起来。正是这种联系使数据库成为“关系型”的。
实例:回答实际问题
1. 读取数据:“显示所有在 Lisbon 的客户”:
SELECT name, email
FROM customers
WHERE city = 'Lisbon';
2. 排序并限制数量:“最近的五笔订单”:
SELECT id, total, placed_at
FROM orders
ORDER BY placed_at DESC
LIMIT 5;
3. 合并表格:“每笔订单及对应客户的姓名”:
SELECT o.id, c.name, o.total
FROM orders o
JOIN customers c ON c.id = o.customer_id;
4. 汇总:“每位客户的总消费”:
SELECT c.name, SUM(o.total) AS total_spent
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY total_spent DESC;
按照上面的示例数据,结果会是 Lena Ortiz 为 67.00,Sam Patel 为 18.50。
5. 修改数据:
INSERT INTO customers (name, email, city)
VALUES ('Ana Silva', 'ana@example.com', 'Porto');
UPDATE customers SET city = 'Porto' WHERE id = 1;
DELETE FROM orders WHERE id = 102;
这些语句对应几乎所有应用的四种基本操作:创建、读取、更新和删除,称为 CRUD。
需要提醒一句:UPDATE customers SET city = 'Porto'; 如果没有 WHERE 子句,就会修改每一位客户。在运行任何修改之前,务必先检查 WHERE。
SQL 的主要命令
| 命令 | 作用 |
|---|---|
SELECT | 读取数据 |
INSERT | 添加新行 |
UPDATE | 修改已有的行 |
DELETE | 删除行 |
CREATE TABLE / ALTER TABLE | 创建或修改表的结构 |
WHERE | 筛选受影响的行 |
JOIN | 合并相关的表 |
GROUP BY | 把行汇总成组,配合 COUNT、SUM、AVG 使用 |
ORDER BY / LIMIT | 对结果排序并限制数量 |
SQL 是标准化的,但每个数据库都会添加自己的扩展,称为方言(dialect)。Postgres、MySQL 和 SQLite 都能理解上面的示例,只是日期函数等细节略有不同。
关键术语
| 术语 | 含义 |
|---|---|
| 查询(Query) | 一条 SQL 语句,尤其是用于读取数据的语句。 |
| 表 / 行 / 列 | 一类事物 / 一条记录 / 一项属性。 |
| 主键(Primary key) | 唯一标识每一行的列,通常是 id。 |
| 外键(Foreign key) | 指向另一张表中某一行的列,例如 customer_id。 |
| 索引(Index) | 一种查找结构,使搜索某一列的速度大幅提升。 |
| 模式(Schema) | 所有表和列的结构。 |
| 事务(Transaction) | 一组要么全部成功、要么全部失败的修改。 |
| SQL 注入(SQL injection) | 一种攻击方式,把用户输入偷偷塞进查询语句中。使用参数化查询可以防止。 |
常见误解
- “SQL 就是数据库。” SQL 是语言;Postgres、MySQL 和 SQLite 是使用这门语言的数据库。
- “SQL 很老了,所以已经过时。” 它是成熟的,而不是过时的。现代数据库和数据工具仍在使用它,许多新系统也纷纷加入了 SQL 支持。
- “只有开发者才能使用 SQL。” 分析师、营销人员和创始人每天都在使用简单的查询。
- “SQL 无法处理灵活的数据。” 许多 SQL 数据库也能存储 JSON。例如,Postgres 就有
jsonb类型。参见SQL 与 NoSQL。 - “让 AI 在生产环境中运行任何 SQL 都没问题。” 读取的风险较低;对线上数据进行修改和删除则需要备份,并再次审查。参见如何备份应用数据库。
可以向 AI 构建工具提出的要求
- “展示我数据库中的表,以及每一列的含义。”
- “写一条只读查询:过去 30 天里每天新注册的人数是多少?”
- “在运行任何 UPDATE 或 DELETE 之前,先给我看查询语句,以及它将影响的行数。”
- “为我们最常用于筛选和排序的列添加索引。”
- “确保每一条使用用户输入的查询都是参数化的。”
- “把订单和付款的更新包装在一个事务中,使它们不会只完成一半。”
Mythex 中的 SQL
当你的应用需要存储数据时,Mythex 会为项目添加一个专用的 Postgres 数据库——在聊天中提出要求即可,例如“把候补名单的邮箱保存到数据库”,或使用 /database 命令(数据库)。Agent 会创建表并编写查询,你也可以在 Ask 模式中要求它用通俗的语言解释任何查询。关于数据库本身,可阅读什么是 Postgres。
常见问题
简单来说,什么是 SQL?
SQL(结构化查询语言)是操作关系型数据库的标准语言。你用它向数据提问,例如“本周下了哪些订单”,也可以用它添加、修改或删除记录。
SQL 怎么读?
“S-Q-L”(逐个字母读出)和“sequel”两种读法都常见且正确。这门语言最初名为 SEQUEL,第二种读法就是由此而来。
SQL 是一种编程语言吗?
SQL 是一种为管理数据而设计的查询语言。你描述想要得到什么结果,数据库自己决定如何获取。它本身不用于构建完整的应用,但几乎每个使用关系型数据库的应用都会用到它。
SQL 难学吗?
基础部分并不难:SELECT、WHERE、ORDER BY、INSERT、UPDATE 和 DELETE 就能满足大部分日常需求,读起来几乎像英文句子。连接(join)、分组和性能调优则需要更长时间才能掌握。
用 AI 构建应用需要懂 SQL 吗?
不需要。AI 构建工具会替你编写 SQL 或数据库代码。了解一点基础知识,可以帮你检查数据、要求生成报表,并在有风险的改动发生之前发现问题。