MySQL: SQL基础语法入门与分类详解

最后更新:2026-08-26

SQL 是操作数据库的通用语言——学会它,你就掌握了所有关系型数据库的钥匙。

本课系统介绍 SQL 的分类和基础语法,为后续学习打下坚实基础。

1. 你将学到


2. 一个分析师的真实故事

(1) 痛点:换个数据库就不会了

一个数据分析师在公司用 Oracle,跳槽后新公司用 MySQL:

"我写了 3 年 Oracle SQL,换到 MySQL 后发现有些语法不一样——ROWNUM 变成 LIMIT,SYSDATE 变成 NOW()。难道要重新学?"

其实不用——SQL 核心语法是通用的,差异只占 5%。

(2) SQL 标准的解法

SQL 是国际标准(ISO/IEC 9075),所有关系型数据库都遵循:

SQL
-- 这条 SQL 在 MySQL、PostgreSQL、Oracle、SQL Server 中都能运行
SELECT 1 + 1 AS result;

收益: 学会 SQL 标准语法,换数据库只需学 5% 的差异。

数据库 相同语法 差异语法
MySQL 95% LIMIT、AUTO_INCREMENT
PostgreSQL 95% SERIAL、ILIKE
Oracle 95% ROWNUM、SYSDATE
SQL Server 95% TOP、GETDATE()

3. SQL 五大分类

100%
graph TB
    A[SQL 语言] --> B[DDL 数据定义]
    A --> C[DML 数据操作]
    A --> D[DQL 数据查询]
    A --> E[DCL 数据控制]
    A --> F[TCL 事务控制]
    B --> B1[CREATE]
    B --> B2[ALTER]
    B --> B3[DROP]
    C --> C1[INSERT]
    C --> C2[UPDATE]
    C --> C3[DELETE]
    D --> D1[SELECT]
    E --> E1[GRANT]
    E --> E2[REVOKE]
    F --> F1[COMMIT]
    F --> F2[ROLLBACK]
分类 全称 关键字 用途 危险程度
DDL Data Definition Language CREATE/ALTER/DROP/TRUNCATE 定义数据库结构 ⚠️ 中
DML Data Manipulation Language INSERT/UPDATE/DELETE 增删改数据 ⚠️ 中
DQL Data Query Language SELECT 查询数据 ✅ 安全
DCL Data Control Language GRANT/REVOKE 权限管理 🔴 高
TCL Transaction Control Language COMMIT/ROLLBACK/SAVEPOINT 事务控制 ⚠️ 中

(1) DDL — 数据定义语言

定义数据库的结构(库、表、索引)。

SQL
-- 创建数据库
CREATE DATABASE mydb;

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

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

-- 删除表
DROP TABLE users;

-- 清空表数据(保留结构)
TRUNCATE TABLE users;

(2) DML — 数据操作语言

操作表中的数据(增、删、改)。

SQL
-- 插入数据
INSERT INTO users (id, name) VALUES (1, 'Alice');

-- 更新数据
UPDATE users SET name = 'Bob' WHERE id = 1;

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

(3) DQL — 数据查询语言

从表中查询数据。

SQL
-- 查询所有字段
SELECT * FROM users;

-- 条件查询
SELECT name, email FROM users WHERE id > 10;

-- 排序查询
SELECT * FROM users ORDER BY created_at DESC;

-- 限制结果
SELECT * FROM users LIMIT 10;

(4) DCL — 数据控制语言

管理用户权限

SQL
-- 授予权限
GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost';

-- 撤销权限
REVOKE INSERT ON mydb.* FROM 'user'@'localhost';

(5) TCL — 事务控制语言

管理事务的提交和回滚。

SQL
-- 开始事务
START TRANSACTION;

-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 或回滚事务
ROLLBACK;

4. SELECT 基础语法

(1) SELECT 完整语法结构

SQL
SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column [ASC|DESC]]
[LIMIT offset, count];

▶ 示例:基本查询

SQL
-- 查询所有字段
SELECT * FROM employees;

-- 查询指定字段
SELECT first_name, last_name, salary FROM employees;

-- 使用别名
SELECT first_name AS 名, last_name AS 姓, salary AS 薪资 FROM employees;

-- 去重查询
SELECT DISTINCT department FROM employees;
▶ 试一试

输出:

TEXT 📖 仅展示
+------+--------+---------+
| 名   | 姓     | 薪资    |
+------+--------+---------+
| John | Smith  | 5000.00 |
| Jane | Doe    | 6000.00 |
+------+--------+---------+

▶ 示例:条件查询

SQL
-- 等值查询
SELECT * FROM employees WHERE department = 'Engineering';

-- 范围查询
SELECT * FROM employees WHERE salary BETWEEN 4000 AND 8000;

-- 列表查询
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing');

-- 模糊查询
SELECT * FROM employees WHERE first_name LIKE 'J%';

-- 空值查询
SELECT * FROM employees WHERE manager_id IS NULL;
▶ 试一试

输出:

TEXT 📖 仅展示
+-------------+-----------+--------+-------------+
| first_name  | last_name | salary | department  |
+-------------+-----------+--------+-------------+
| John        | Smith     | 5000.00| Engineering |
| Jane        | Doe       | 6000.00| Engineering |
+-------------+-----------+--------+-------------+

5. SQL 注释

(1) 单行注释

SQL
-- 这是单行注释(标准写法)
SELECT * FROM users; -- 查询所有用户

# 这也是单行注释(MySQL 特有)
SELECT * FROM users;

(2) 多行注释

SQL
/*
这是多行注释
可以跨越多行
常用于说明复杂查询
*/
SELECT * FROM users
WHERE status = 'active';

▶ 示例:注释的实际应用

SQL
/*
功能:查询活跃用户的统计信息
作者:Alice
日期:2026-07-03
修改记录:
  - 2026-07-02 添加 email_verified 条件
  - 2026-07-03 添加注册时间筛选
*/
SELECT 
    COUNT(*) AS total_users,           -- 用户总数
    AVG(age) AS avg_age,               -- 平均年龄
    MIN(created_at) AS earliest_reg    -- 最早注册时间
FROM users
WHERE status = 'active'                -- 只统计活跃用户
  AND email_verified = TRUE            -- 邮箱已验证
  AND created_at >= '2025-01-01';      -- 2025年后注册
▶ 试一试

6. 关键字与保留字

(1) 什么是关键字

关键字是 SQL 中有特殊含义的词,如 SELECTFROMWHERE

类型 说明 示例
关键字 有特殊含义,但可用作标识符(需加反引号) ordergroup
保留字 禁止用作标识符(即使加反引号也不推荐) SELECTTABLE

▶ 示例:关键字冲突处理

SQL
-- 错误:order 是关键字
CREATE TABLE order (id INT);

-- 正确:使用反引号包裹
CREATE TABLE `order` (id INT);

-- 更好:避免使用关键字作为表名
CREATE TABLE orders (id INT);
▶ 试一试

7. 标识符命名规范

(1) 命名规则

规则 说明 示例
字符范围 字母、数字、下划线 user_name
首字符 必须是字母或下划线 1user
长度限制 最长 64 个字符
大小写 Windows 不敏感,Linux 敏感 Usersusers(Linux)
保留字 避免使用 order ❌ → orders

(2) 推荐命名风格

风格 示例 推荐度
snake_case user_name, order_id ⭐⭐⭐
camelCase userName, orderId ⭐⭐
PascalCase UserName, OrderId
💡 提示: MySQL 社区推荐使用 snake_case,与官方文档风格一致。

▶ 示例:良好的命名实践

SQL
-- 好的命名
CREATE TABLE user_orders (
    id INT PRIMARY KEY,
    user_id INT,
    order_number VARCHAR(20),
    total_amount DECIMAL(10,2),
    created_at TIMESTAMP
);

-- 不好的命名
CREATE TABLE t1 (
    c1 INT,
    c2 VARCHAR(20),
    c3 DECIMAL(10,2)
);
▶ 试一试

8. SQL 语句书写规范

(1) 格式规范

SQL
-- 推荐格式:关键字大写,每行一个字段
SELECT 
    first_name,
    last_name,
    salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC
LIMIT 10;

(2) 分号的重要性

SQL
-- 分号是语句结束符
SELECT * FROM users;  -- 语句1
SELECT * FROM orders; -- 语句2

-- 多条语句执行时必须有分号

❓ 常见问题

Q SQL 语句必须大写吗?
A 不是必须的,但推荐关键字大写(SELECT/FROM/WHERE),提高可读性。MySQL 不区分大小写。
Q * 和指定字段哪个好?
A 生产环境推荐指定字段(性能更好、语义清晰)。学习阶段可以用 *
Q SQL 注释会影响性能吗?
A 不会。MySQL 解析器会忽略注释,注释不会执行。
Q 中文可以做表名/字段名吗?
A 技术上可以(需反引号),但强烈不推荐。用英文 user_name 而不是 用户名
Q DDL 和 DML 哪个更危险?
A DDL(DROP/ALTER)更危险——删表数据全没,改表结构可能影响应用。操作前务必备份。

📖 小节


📝 作业

  1. 基础题(难度⭐):写出创建 students 表的 DDL 语句,包含 id(主键)、name(非空)、age、grade 字段。

  2. 进阶题(难度⭐⭐):编写一条 SELECT 语句,从 employees 表中查询工资高于 5000 且部门为 'Sales' 的员工,按工资降序排列,只显示前 5 条。

  3. 挑战题(难度⭐⭐⭐):编写一个完整的事务:从账户 A 转账 100 元到账户 B,包含开始事务、两条 UPDATE、提交或回滚。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏