SQL 企业实战全流程|全覆盖前置基础 + 核心语法(MySQL8.0 可直接运行)

前言

本文包含数据库基础概念、建库规范、SQL 四大语言,到单表查询、条件筛选、函数、分组、增删改、约束、生产安全规范。


一、我认为的SQL 练习全流程

  1. 创建专用练习数据库:独立隔离,不影响其他环境。
  2. 切换并使用目标数据库:确保操作在正确库内。
  3. 创建业务数据表:按企业规范设计字段、主键、约束、注释。
  4. 插入测试业务数据:真实模拟数据,支持全部语法验证。
  5. 执行实战 SQL 操作 :覆盖阶段 1 + 阶段 2 全部知识点
  6. 核对执行结果:校验字段、逻辑、统计口径、影响行数。
  7. 练习完成后清理环境:先删表 → 再删库,环境归零。

二、第 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 步:核对执行结果(企业必备)

  1. 字段与业务需求一致
  2. 筛选条件准确
  3. 统计口径正确
  4. 增删改行数符合预期
  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
  • 六大约束
  • 生产安全规范
相关推荐
头歌实践平台1 小时前
HBase 完全分布式安装(新)
数据库·分布式·hbase
大尚来也1 小时前
主键、外键、索引,一篇讲透
java·数据库·oracle
韶博雅2 小时前
oracle优化用到的sql
sql·oracle·ffmpeg
j7~2 小时前
【MYSQL】表的内外连接--详解(重点)
数据库·mysql·内连接·左外连接·右外连接
147API2 小时前
Claude Opus 4.8 接口与工程落地分析:长任务调用链应该怎么设计
java·前端·数据库
绝知此事2 小时前
Redis 从入门到精通:Spring Boot 实战三部曲(一)—— 基础核心与快速上手
数据库·redis·缓存
鸽芷咕2 小时前
金仓数据库标量子查询消除:一条SQL从32秒优化到24毫秒
数据库·sql
朝阳5812 小时前
MySQL 主从复制 — 双服务器灾备方案(原生安装)
服务器·数据库·mysql
是狐狸吖2 小时前
Redis分布式锁进阶第十六篇
数据库·redis·分布式