指南

什么是 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(客户)

idnameemailcity
1Lena Ortizlena@example.comLisbon
2Sam Patelsam@example.comLeeds

orders(订单)

idcustomer_idtotalplaced_at
101142.002026-09-20
102218.502026-09-22
103125.002026-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 或数据库代码。了解一点基础知识,可以帮你检查数据、要求生成报表,并在有风险的改动发生之前发现问题。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)