前言
本文包含数据库基础概念、建库规范、SQL 四大语言,到单表查询、条件筛选、函数、分组、增删改、约束、生产安全规范。
一、我认为的SQL 练习全流程
- 创建专用练习数据库:独立隔离,不影响其他环境。
- 切换并使用目标数据库:确保操作在正确库内。
- 创建业务数据表:按企业规范设计字段、主键、约束、注释。
- 插入测试业务数据:真实模拟数据,支持全部语法验证。
- 执行实战 SQL 操作 :覆盖阶段 1 + 阶段 2 全部知识点。
- 核对执行结果:校验字段、逻辑、统计口径、影响行数。
- 练习完成后清理环境:先删表 → 再删库,环境归零。
二、第 1 步:创建练习数据库
sql
-- 创建练习库(不存在则创建)
CREATE DATABASE IF NOT EXISTS sql_stage1_2;
-- 进入当前库(必须执行)
USE sql_stage1_2;
三、第 2 步:创建业务表(含规范、约束、注释)
sql
-- 用户表
CREATE TABLE `user` (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID(主键)',
username VARCHAR(50) NOT NULL COMMENT '用户名(非空)',
phone VARCHAR(20) UNIQUE COMMENT '手机号(唯一)',
register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间(默认当前)',
status TINYINT NOT NULL DEFAULT 1 COMMENT '1正常 0禁用'
) COMMENT '用户信息表';
-- 订单表
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID',
user_id INT NOT NULL COMMENT '用户ID',
order_time DATETIME NOT NULL COMMENT '下单时间',
total_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
pay_status TINYINT NOT NULL DEFAULT 0 COMMENT '0未支付 1已支付',
refund_status TINYINT NOT NULL DEFAULT 0 COMMENT '0未退款 1已退款'
) COMMENT '订单主表';
-- 商品表
CREATE TABLE product (
product_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID',
product_name VARCHAR(100) NOT NULL COMMENT '商品名称',
price DECIMAL(10,2) NOT NULL COMMENT '售价',
stock INT NOT NULL DEFAULT 0 COMMENT '库存',
create_time DATE NOT NULL COMMENT '上架日期'
) COMMENT '商品信息表';
四、第 3 步:插入真实业务数据
sql
INSERT INTO `user` (username, phone, register_time, status)
VALUES
('张三','13800138000','2026-01-05 10:20:30',1),
('李四','13800138001','2026-01-06 11:10:20',1),
('王五','13800138002','2026-01-07 09:30:15',1),
('赵六',NULL,'2026-01-08 16:40:10',1),
('陈七','13800138004','2026-01-09 14:20:00',0);
INSERT INTO orders (user_id, order_time, total_amount, pay_status, refund_status)
VALUES
(1,'2026-04-01 10:10:00',1500.00,1,0),
(1,'2026-04-01 16:20:00',800.00,1,0),
(2,'2026-04-01 11:30:00',3200.00,1,0),
(2,'2026-04-02 09:15:00',500.00,0,0),
(3,'2026-04-02 14:20:00',450.00,1,1),
(3,'2026-04-03 10:00:00',2100.00,1,0),
(4,'2026-04-03 15:30:00',990.00,1,0),
(1,'2026-04-05 13:20:00',660.00,1,0);
INSERT INTO product (product_name, price, stock, create_time)
VALUES
('苹果15手机',5999.00,100,'2026-01-01'),
('小米14手机',3499.00,150,'2026-01-02'),
('华为手机壳',49.00,200,'2026-01-03'),
('无线蓝牙耳机',299.00,80,'2026-01-04'),
('安卓快充线',25.00,300,'2026-01-05');
五、第 4 步:实战 SQL
【阶段 1 前置基础认知】实战场景
1. 查看当前数据库(DBA 日常)
场景:确认当前操作库,避免走错库。
sql
SELECT DATABASE();
2. 查看表结构(职场必备)
场景:开发 / 测试必用,查看字段、类型、约束。
sql
DESC `user`;
3. 查看建表语句(理解三大范式基础)
场景:复盘表设计是否规范。
sql
SHOW CREATE TABLE `user`;
4. DDL 操作:修改表注释
场景:规范表说明,方便团队维护。
sql
ALTER TABLE `user` COMMENT '用户信息表(阶段1+2练习)';
5. DCL 演示:创建练习用户(企业权限规范)
场景:企业最小权限原则。
sql
CREATE USER IF NOT EXISTS 'test_user'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON sql_stage1_2.* TO 'test_user'@'%';
SHOW GRANTS FOR 'test_user'@'%';
6. TCL 事务演示(数据一致性基础)
场景:保证更新要么全成功,要么全回滚。
sql
START TRANSACTION;
UPDATE product SET stock = 99 WHERE product_id = 1;
ROLLBACK;
【阶段 2 零基础核心语法】全场景实战
1. SELECT 基础 + 别名 + DISTINCT
场景:运营导出用户姓名、手机号,去重用户 ID。
sql
SELECT username AS 姓名, phone AS 手机号 FROM `user`;
SELECT DISTINCT user_id FROM orders;
2. WHERE + IN + BETWEEN
场景:财务查 500--2000 元订单;查指定用户。
sql
SELECT * FROM orders WHERE total_amount BETWEEN 500 AND 2000;
SELECT * FROM `user` WHERE id IN (1,2,3);
3. LIKE 模糊查询
场景:运营查所有手机类商品。
sql
SELECT * FROM product WHERE product_name LIKE '%手机%';
4. 空值判断 IS NULL / IS NOT NULL
场景:客服找未填手机号的用户。
sql
SELECT * FROM `user` WHERE phone IS NULL;
5. ORDER BY 排序 + LIMIT 分页
场景:产品看金额最高前 5 笔订单。
sql
SELECT * FROM orders ORDER BY total_amount DESC LIMIT 5;
6. 字符串函数
场景:报表拼接用户名 + 手机号。
sql
SELECT CONCAT(username, ' / ', phone) AS 用户信息 FROM `user`;
7. 日期函数
场景:日报提取订单日期、注册年份。
sql
SELECT DATE(order_time) AS 订单日期 FROM orders;
SELECT YEAR(register_time) AS 注册年 FROM `user`;
8. 聚合函数 COUNT / SUM / AVG / MAX / MIN
场景:老板看总订单数、GMV、最高单价。
sql
SELECT
COUNT(*) AS 总订单数,
SUM(total_amount) AS 总销售额,
MAX(price) AS 最高价
FROM orders
WHERE pay_status = 1;
9. GROUP BY + HAVING
场景:统计每人消费总额,筛选消费 ≥2000 元用户。
sql
SELECT
user_id,
SUM(total_amount) AS 总消费
FROM orders
GROUP BY user_id
HAVING SUM(total_amount) >= 2000;
10. INSERT 单行 / 多行
场景:运营添加新用户、新商品。
sql
INSERT INTO `user` (username, status) VALUES ('周八',1);
11. UPDATE 安全修改
场景:低价商品批量更新库存(必须带 WHERE)。
sql
UPDATE product SET stock = 50 WHERE price < 100;
12. DELETE / TRUNCATE
场景:删除测试订单;清空临时表。
sql
DELETE FROM orders WHERE order_id = 9;
TRUNCATE TABLE product;
13. 表结构操作(ALTER)
场景:添加邮箱字段、修改库存备注。
sql
ALTER TABLE `user` ADD COLUMN email VARCHAR(100);
ALTER TABLE product MODIFY COLUMN stock INT COMMENT '库存不可负数';
14. 六大约束实战
场景:保证手机号唯一、用户 ID 关联有效。
sql
ALTER TABLE `user` ADD CONSTRAINT uk_phone UNIQUE (phone);
15. 生产安全规范
- UPDATE / DELETE 必须加 WHERE
- 先 SELECT 预览再执行
- 禁止 SELECT *
- 优先逻辑删除,不物理删除
六、第 5 步:核对执行结果(企业必备)
- 字段与业务需求一致
- 筛选条件准确
- 统计口径正确
- 增删改行数符合预期
- 无 WHERE 不执行
七、第 6 步:清理环境(规范收尾)
sql
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS product;
DROP TABLE IF EXISTS `user`;
DROP DATABASE IF EXISTS sql_stage1_2;
八、全覆盖知识点清单
阶段 1 前置基础认知
- SQL / RDBMS 基础理解
- 表、字段、行、NULL、主键
- 三大范式、数据完整性
- 数据库选型理解
- MySQL 环境 / 客户端使用
- 四大语言 DDL / DML / DCL / TCL
阶段 2 零基础核心语法
- SELECT / 别名 / DISTINCT
- WHERE / IN / BETWEEN
- LIKE / 模糊查询
- IS NULL / IS NOT NULL
- ORDER BY / LIMIT
- 字符串函数
- 日期函数
- 聚合函数
- GROUP BY / HAVING
- INSERT / UPDATE / DELETE
- CREATE / ALTER TABLE
- 六大约束
- 生产安全规范