首页 / MySQL 入门教程 / SQL 语句分类与语法基础

MySQL 入门教程

SQL 语句分类与语法基础

本教程共 46 篇 · 第 5 篇 · 更新于 2026-07-30 · 约 11 分钟阅读

MySQLMySQL 入门教程SQLDDLDMLDQL语法基础注释

5. SQL 语句分类与语法基础

本节目标:把 SQL 语句按用途分成五大类搞清楚,知道每类对应哪些命令;同时掌握关键字大小写、语句结束符、注释写法、命名规范这些写 SQL 的基础规矩。

前面我们连上了 MySQL,但还没真正写过几条 SQL。在动手建库建表之前,得先把 SQL 的”语法地图”建立起来。这一节是后面所有章节的地基。

5.1 SQL 是什么

SQL(Structured Query Language,结构化查询语言) 是用来和关系型数据库”对话”的标准语言。你想建表、插数据、查数据、改数据、删数据、管权限,统统用 SQL 表达。

SQL 是国际标准(最新是 SQL:2023),但每个数据库厂商都有自己的扩展。MySQL 的 SQL 大部分遵循标准,又加了不少自家特性(比如 LIMITAUTO_INCREMENT、存储引擎等)。本教程学的是 MySQL 方言。

5.2 SQL 的五大分类

这是本节的重点。SQL 语句按”做什么”分成五类,每类管一摊事。记住这五类,后面学任何命令都能对号入座。

分类全称作用典型语句
DDLData Definition Language定义结构(库、表、列、索引)CREATEALTERDROP
DMLData Manipulation Language操作数据(增删改)INSERTUPDATEDELETE
DQLData Query Language查询数据SELECT
DCLData Control Language控制权限GRANTREVOKE
TCLTransaction Control Language控制事务BEGINCOMMITROLLBACK

下面逐类解释。

DDL:数据定义语言

DDL 用来定义和修改数据库对象的结构,操作的是”骨架”,不是数据本身。比如建一张表、给表加列、删个库。

-- 建库
CREATE DATABASE shop;

-- 建表
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50)
);

-- 改表结构:加列
ALTER TABLE users ADD COLUMN email VARCHAR(100);

-- 删表
DROP TABLE users;

DDL 的特点是自动提交:执行完立即生效,不用也不能回滚。本教程 06~15 章全是 DDL 内容。

DML:数据操纵语言

DML 用来操作表里的数据,即”增删改”。它操作的是表里的行。

-- 插入一行
INSERT INTO users(id, username) VALUES(1, 'zhangsan');

-- 修改数据
UPDATE users SET username = 'lisi' WHERE id = 1;

-- 删除数据
DELETE FROM users WHERE id = 1;
Note

DML 和 DDL 的区别:DDL 改”表结构”(有几个列、什么类型),DML 改”表数据”(每行存什么值)。DROP TABLE 是 DDL(连表带数据全没),DELETE FROM 是 DML(只删数据,表还在)。

DQL:数据查询语言

DQL 只有一个核心语句:SELECT。但它是 SQL 里最复杂、最强大的部分,后面要花十几章讲。

-- 查所有
SELECT * FROM users;

-- 条件查询
SELECT username, email FROM users WHERE age > 18 ORDER BY created_at DESC;

有些资料不把 DQL 单列,归到 DML 里。但 MySQL 圈子习惯单独叫 DQL,因为查询实在太重要了。

DCL:数据控制语言

DCL 管权限:谁能访问什么、能做什么操作。

-- 给账号授权
GRANT SELECT, INSERT ON shop.* TO 'appuser'@'localhost';

-- 收回权限
REVOKE INSERT ON shop.* FROM 'appuser'@'localhost';

创建账号(CREATE USER)、删账号(DROP USER)也算这一类。

TCL:事务控制语言

TCL 管事务,保证一组操作要么全成功、要么全撤销。

BEGIN;       -- 开启事务
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;      -- 提交,永久生效
-- 或者 ROLLBACK; 回滚,撤销上面的修改

事务是 InnoDB 的核心特性,后面会专门讲。

5.3 关键字大小写:写法自由,但建议统一

SQL 的关键字(SELECTFROMWHERE 等)不区分大小写。下面三句完全等价:

SELECT * FROM users;
select * from users;
SeLeCt * FrOm users;

但有两个东西是区分大小写的:

  1. 数据值WHERE name = 'Tom'WHERE name = 'tom' 查出来的可能不一样(取决于排序规则);
  2. 标识符(库名、表名):在 Linux 上区分大小写,Windows/macOS 默认不区分。
Tip

业界惯例:关键字大写,表名列名小写。这样一眼能看出哪些是 SQL 语法、哪些是你自己起的名字,可读性好很多。本教程全程这么写,建议你也养成这习惯。

5.4 语句结束符:分号不可少

mysql 命令行里,每条 SQL 语句必须以分号 ; 结尾,否则 MySQL 会认为你没说完,一直等你继续输入:

mysql> SELECT * FROM users
    ->     -- 这里光标还在闪,没执行
    -> ;   -- 加上分号才执行

看到 -> 这个续行提示符,说明语句还没结束。要么补完加分号,要么敲 \c 放弃。

Note

有些客户端(图形化工具、程序里的 SQL)不强制分号,因为它们自己知道一条语句在哪结束。但命令行必须加。养成加分号的习惯没坏处。

5.5 注释:给人看的备注

SQL 里写注释有三种方式:

单行注释:--

-- 这是一行注释,注意 -- 后面有个空格
SELECT * FROM users;  -- 行尾也能注释
Warning

-- 后面必须有一个空格或制表符,否则 MySQL 会把它当成负号运算。这是新手常踩的坑。写成 --注释 是错的,要写成 -- 注释

单行注释:#

# 这是 MySQL 特有的单行注释,# 后面不用空格
SELECT * FROM users;

# 是 MySQL 扩展,标准 SQL 没有,跨数据库时少用。

多行注释:/* */

/*
   这是多行注释
   可以写好几行
   适合写详细说明
*/
SELECT * FROM users;

/* */ 是标准 SQL,所有数据库都支持,也常用来临时屏蔽一段代码。

5.6 标识符命名规范

库名、表名、列名这些统称标识符(Identifier)。起名最好遵循规范,省得后面麻烦:

  • 用字母、数字、下划线,别用中文、空格、特殊符号
  • 不能纯数字,也不能是 SQL 关键字(如 selectorder);
  • 长度适中,表名建议 30 字符内;
  • 见名知意:usersorderscreated_at 这种就很好;
  • 风格统一:要么全 snake_case(下划线),要么全 camelCase,别混着来。

如果非要起带空格或特殊字符的名字,得用反引号包起来:

CREATE TABLE `order details` (`user id` INT);  -- 能跑,但千万别这么干
Tip

反引号是 MySQL 的转义符,标准 SQL 用双引号。起规范的名字,就根本用不到反引号。

5.7 数据值的写法

写 SQL 时,不同类型的数据值写法不同:

  • 字符串和日期:必须用单引号包起来,如 'zhangsan''2026-07-30'
  • 数字:直接写,不用引号,如 1899.5
  • NULL:表示”没有值”,直接写 NULL,不用引号。
INSERT INTO users(id, username, age, created_at)
VALUES(1, 'zhangsan', 25, '2026-07-30 10:00:00');

UPDATE users SET age = NULL WHERE id = 1;
Warning

别用双引号包字符串。标准 SQL 里双引号是”标识符引用”,MySQL 默认也能用,但容易出错。统一用单引号最稳。

5.8 一条 SQL 的基本结构

以最常用的 SELECT 为例,看看一条 SQL 的骨架:

SELECT   要查的列          -- 选什么
FROM     表名              -- 从哪查
WHERE    条件              -- 筛选哪些行
GROUP BY 分组列            -- 按什么分组
HAVING   分组后的条件       -- 筛选哪些组
ORDER BY 排序列            -- 按什么排序
LIMIT    行数;             -- 限制返回几行

执行顺序和书写顺序不一样,大致是 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT。这个后面查询章会细讲,先记住书写顺序。

5.9 小结

这一节建立了 SQL 的全局认知:

  • SQL 分五类:DDL 建结构、DML 改数据、DQL 查数据、DCL 管权限、TCL 控事务;
  • 关键字大小写不敏感,但建议关键字大写、表名列名小写;
  • 命令行里语句必须以分号结尾,\c 可取消未完成语句;
  • 注释有 -- #/* */ 三种,-- 后面要留空格;
  • 标识符用字母数字下划线,字符串日期用单引号,数字不用引号。

地基打好,下一节就开始用 DDL 建你的第一个数据库。