MySQL 小白循序渐进实操路线(纯动手,跟着敲就能练,全程生活化案例:外卖平台)

MySQL 小白循序渐进实操路线(纯动手,跟着敲就能练,全程生活化案例:外卖平台)

配套模拟业务:外卖系统,分 3 张表user 用户表、shop 商家表、order 订单表环境准备:本地安装 MySQL8.0 + Navicat/DBeaver 可视化工具,没有可视化就用 cmd 黑窗口

阶段 1:环境操作 + 数据库操作(开超市、关超市,1 天实操)

实操目标:会登录、建库、删库、切换库

  1. 登录 MySQL(黑窗口命令)

sql

css 复制代码
mysql -uroot -p

输入安装时设置的密码,进入数据库2. 查看所有数据库(看看有多少间超市)

sql

ini 复制代码
show databases;
  1. 创建外卖数据库(新开一间外卖超市)

sql

ini 复制代码
create database takeout_db;
  1. 切换到这个库(进入这间超市干活)

sql

ini 复制代码
use takeout_db;
  1. 删除数据库(直接拆掉整个超市,谨慎执行)

sql

ini 复制代码
drop database takeout_db;

Q:在删除数据库的时遇到的问题:上面已经已经use 了,还可以直接删除。不存在占用的问题吗?就像文件被打开了,无法删除,需要关闭文件再删除;是不是也需要关闭数据库?

删除数据库操作疑问?
核心结论:就算执行了 use 库名,照样能删库,不存在 "占用锁定不让删"
1. 原理通俗解释

use db; 只是客户端标记「我接下来默认操作这个库」,只是本地标记,不会独占、锁定这个数据库 。服务器层面:数据库只是一堆文件,只要你账号有删除权限,随时能执行 drop database xxx;

实操演示

sql

sql 复制代码
-- 进入库
use takeout_db;
-- 直接删除当前正在use的库
drop database takeout_db;

执行完不会报错,库直接被删掉。

2. 删除后会发生什么(重点小白坑)

库删完,但你的客户端标记还停留在这个不存在的库,后续执行任何不带库名的 SQL 都会报错:

sql

sql 复制代码
-- 删库后再查表
select * from user;

报错:Unknown database 'takeout_db'

解决办法:

  1. 切换到其他库 use mysql;
  2. 或者直接断开重连 exit;
3. 唯一会删不掉的场景(不是 use 导致)

不是因为你 use 了,而是有其他客户端正在执行长 SQL、事务未提交,数据库被锁,此时 drop 会阻塞等待。举个生活例子:别人正在拿货架里的卡片修改(事务没提交),你想直接拆掉整个货架,系统会等对方操作结束才允许删除。

4. 小白安全实操规范
  1. 不要在 use 当前库 后随手 drop,容易删完忘记切库,后续全报错;
  2. 删除前先切到系统库再删,逻辑更清晰:

sql

ini 复制代码
use mysql;
drop database takeout_db;
  1. 线上绝对禁止随意 drop,本地测试库随便操作。
写sql 有专门的app 吗比如idea 的家族
一、IDEA 家族专属 SQL 专用软件:DataGrip(你要的专业写 SQL 独立 APP)
1. 归属关系

DataGrip 是 JetBrains(IDEA 母公司) 单独出品、专门只用来写 SQL、管理数据库的独立 IDE,和 IDEA、PyCharm、WebStorm 是亲兄弟,界面、快捷键、操作逻辑完全统一JetBrains

核心优势(小白友好)
  1. 全数据库通吃:MySQL、MariaDB、Oracle、SQLServer、Redis、SQLite 全部支持
  2. 智能 SQL 补全:输入表名、字段自动提示,写错实时标红、一键修复
  3. 可视化表结构、ER 关系图(直观看懂一对多、多对多)
  4. 查询历史、SQL 格式化、一键导出 Excel/CSV/JSON
  5. 事务可视化、执行计划、慢 SQL 分析,学习 MySQL 超合适
  6. 非商业个人使用免费
2. 不用单独装 DataGrip:IDEA 旗舰版自带全套 SQL 功能

如果你已经装了 IntelliJ IDEA Ultimate(旗舰版) ,内置「数据库工具与 SQL」插件,功能和 DataGrip100% 一模一样,不用额外开软件,写 Java 代码和 SQL 在同一个窗口切换。

关键区分(小白避坑)
  • IDEA 社区版(免费版):没有数据库功能,不能连 MySQL 写 SQL
  • IDEA 旗舰版 / DataGrip:完整 SQL 开发能力
3. JetBrains 全家桶通用规则

PyCharm 专业版、WebStorm、GoLand、CLion 等所有 JetBrains 付费 IDE,全都内置同款数据库工具,逻辑和 DataGrip 完全一致。

二、其他主流 MySQL 可视化工具(非 IDEA 家族,备选)
1. DBeaver(免费开源,学生 / 小白首选)

完全免费无版权限制,功能对标 DataGrip,跨平台,新手练手最推荐。

界面简单直观,操作傻瓜化,适合零基础快速上手;商业使用需正版授权。

3. MySQL Workbench(MySQL 官方免费工具)

Oracle 官方出品,只支持 MySQL,建模画图强,但代码提示弱,界面老旧。

三、小白怎么选(简单建议)
  1. 长期学开发、写大量 SQL、用 IDEA 写代码→ 方案 A:直接用 IDEA 旗舰版自带数据库(不用多开软件)→ 方案 B:单独装 DataGrip,专门只练 MySQL
  2. 纯本地练 MySQL、不想花钱、不用 IDEA→ DBeaver(首选免费)
  3. 纯新手临时简单操作、不想配置复杂驱动→ Navicat Lite 免费版
四、DataGrip 实操小亮点(适配你之前的 MySQL 学习)
  1. 可视化执行 use 库名,左侧面板直接切换数据库,不用手写命令
  2. 删库、建表、新增字段全部支持图形点击操作,自动生成对应 SQL 语句
  3. 执行delete/update会提前弹窗提醒,防止忘记加 where 清空全表
  4. 批量插入测试数据、一键生成建表语句,做实操练习效率翻倍

实操练习任务

  1. 新建库 test_db,查看库列表,切换进去,最后删除测试库
  2. 熟记报错:库名重复、密码错误两种常见问题

阶段 2:表操作 DDL(搭建货架,2 天实操)

实操目标:建表、改字段、删表、看懂字段约束

实操 1:创建用户货架 user 表(核心语句,必敲)

sql

sql 复制代码
CREATE TABLE `user` (
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一身份证',
  name VARCHAR(20) NOT NULL COMMENT '用户名,不能为空',
  phone CHAR(11) UNIQUE NOT NULL COMMENT '手机号,不能重复',
  sex TINYINT DEFAULT 0 COMMENT '0未知 1男 2女,不填默认0',
  address VARCHAR(100) COMMENT '收货地址'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '外卖顾客货架';
实操 2:查看货架结构(看格子标签)

sql

sql 复制代码
desc `user`;
实操 3:修改货架(新增格子 / 修改格子 / 删除格子)

sql

sql 复制代码
-- 新增age年龄字段
alter table `user` add age int;
-- 修改age字段长度、注释
alter table `user` modify age tinyint comment '年龄';
-- 删除age字段
alter table `user` drop column age;
实操 4:删除整张货架

sql

sql 复制代码
drop table `user`;

阶段练习任务

  1. 新建商家表 shop:id、店铺名、店主电话、营业状态(1 营业 0 打烊)、地址
  2. 给 shop 表新增 "评分" 字段,再删除
  3. 用 desc 查看两张表结构,区分主键、非空、唯一、默认值

阶段 3:CRUD 增删改查核心(存取卡片,3 天实操,重中之重)

3.1 C 新增 INSERT(进货,往货架放卡片)

sql

sql 复制代码
-- 完整插入全部字段
insert into `user`(name,phone,sex,address) 
values ('张三','13800001111',1,'保定莲池XX小区');

-- 只填必填字段,默认值自动填充
insert into `user`(name,phone) values ('李四','13900002222');

实操任务:一次性插入 3 个用户数据

3.2 R 查询 SELECT(翻找卡片,80% 开发都在用)

基础查询

sql

sql 复制代码
-- 查询整张表所有卡片(全部用户)
select * from `user`;
-- 只看姓名、手机号(只看指定格子)
select name,phone from `user`;
条件筛选 WHERE(精准找人,重点)

sql

sql 复制代码
-- 查找名字叫张三的用户
select * from `user` where name = '张三';
-- 查找男性用户
select * from `user` where sex = 1;
-- 模糊查询:名字带"张"的人
select * from `user` where name like '%张%';
排序、分页(翻页功能)

sql

sql 复制代码
-- 按id从大到小排序
select * from `user` order by id desc;
-- 分页:每页2条,第1页 limit 起始,条数
select * from `user` limit 0,2;

3.3 U 修改 UPDATE(修改卡片信息)

sql

sql 复制代码
-- 张三搬家,修改地址,必须加where精准定位
update `user` set address='保定竞秀区' where name='张三';

⚠️ 实操踩坑测试(千万别线上执行):不加 where 会全表修改

sql

sql 复制代码
-- 危险!所有用户地址全部被改掉,本地测试体验后果
update `user` set address='随便填';

3.4 D 删除 DELETE(丢掉卡片)

sql

sql 复制代码
-- 删除手机号13900002222的用户
delete from `user` where phone='13900002222';

⚠️ 危险操作:无 where 清空整张表

sql

javascript 复制代码
delete from `user`;

阶段实操作业

  1. 插入 5 条用户数据
  2. 查询所有女性、名字带李的用户
  3. 修改 1 个人的手机号和地址
  4. 删除 1 条测试数据

阶段 4:聚合函数 + 分组统计(超市算账,2 天实操)

统计类需求:多少用户、最高订单、每家店销量

常用聚合函数实操

sql

sql 复制代码
-- count 统计总用户数量
select count(id) from `user`;
-- max/min 最大/最小用户id
select max(id),min(id) from `user`;
-- sum求和、avg平均值(订单金额演示)
select sum(money),avg(money) from `order`;

group by 分组统计

sql

sql 复制代码
-- 按性别分组,统计男女各多少人
select sex,count(id) from `user` group by sex;
-- having 过滤分组后数据:只展示人数大于1的分组
select sex,count(id) num from `user` group by sex having num>1;

实操任务:统计商家表中营业 / 打烊店铺各有多少家

阶段 5:多表联查 JOIN(多货架搭配查找,3 天实操难点)

先建好订单表 order(一对多关系:一个用户多个订单)

sql

sql 复制代码
CREATE TABLE `order` (
  id INT PRIMARY KEY AUTO_INCREMENT,
  user_id INT COMMENT '下单用户id,关联user表主键',
  money DECIMAL(10,2) COMMENT '订单金额',
  create_time DATETIME COMMENT '下单时间'
);

插入几条订单数据,user_id 对应 user 表里的 id

1. 内连接 inner join(只查两边匹配的数据)

需求:查出订单 + 下单人的姓名、手机号

sql

sql 复制代码
select o.id,o.money,u.name,u.phone
from `order` o
inner join `user` u on o.user_id = u.id;

2. 左连接 left join(左边全部数据,匹配不到显示 null)

需求:查询所有用户,包括没下过单的人

sql

sql 复制代码
select u.name,o.money
from `user` u
left join `order` o on u.id = o.user_id;

实操任务

  1. 区分 inner join /left join 输出结果差异
  2. 筛选张三的所有订单,显示订单金额

阶段 6:索引实操(建目录提速,1 天实操)

1. 创建索引

sql

sql 复制代码
-- 给手机号单独建普通索引(经常用来查询)
create index idx_user_phone on `user`(phone);

2. 查看表所有索引

sql

sql 复制代码
show index from `user`;

3. 删除索引

sql

perl 复制代码
drop index idx_user_phone on `user`;

实操验证速度

  1. 插入上万条测试数据(工具批量生成)
  2. 不加索引查手机号,观察等待时间
  3. 创建索引后再次查询,对比速度差距

阶段 7:事务实操(转账案例,1 天实操,理解 ACID)

模拟场景:用户 A 余额 100,转账 50 给用户 B

正常全部执行成功

sql

sql 复制代码
-- 开启事务
start transaction;
-- A扣钱
update account set balance=balance-50 where id=1;
-- B加钱
update account set balance=balance+50 where id=2;
-- 提交,永久生效
commit;

中途出错回滚(撤销全部操作)

sql

sql 复制代码
start transaction;
update account set balance=balance-50 where id=1;
-- 这里模拟报错,执行回滚
rollback;

实操任务:分别测试 commit 提交、rollback 回滚两种效果,观察余额变化

阶段 8:小白综合实战项目(3 天完整闭环)

实战需求:简易外卖订单管理系统

涉及表:user 用户、shop 商家、food 菜品、order 订单要求独立写出全部 SQL:

  1. 创建 4 张表,设置主键、非空、唯一约束
  2. 批量插入测试数据
  3. 查询:所有用户 + 对应订单、每家店铺菜品数量
  4. 统计:每个用户总消费金额
  5. 分页查询高价订单,建立订单号索引
  6. 模拟下单转账,使用事务保证数据安全

阶段 9:基础运维实操(1 天)

  1. 新建数据库账号,分配仅查询权限

sql

sql 复制代码
-- 创建只读账号
create user read@localhost identified by '123456';
-- 给takeout_db只读权限
grant select on takeout_db.* to read@localhost;
  1. 整库数据备份、恢复(Navicat 一键备份 / 命令行备份)
  2. 查看慢 SQL 日志,定位卡顿查询语句

配套实操练习规则(小白不踩坑)

  1. 所有语句手动敲,禁止复制粘贴,熟悉单词
  2. 先在本地测试库练习,绝对不要直接操作线上数据库
  3. 执行 update /delete 前,先用 select 核对 where 条件是否匹配正确数据
  4. 复杂联查、事务先写草稿,分步执行,一步一验证结果
  5. 每学完一个阶段,独立完成对应作业,不看示例代码复现
相关推荐
Wang's Blog1 小时前
Java框架快速入门: Spring Bean核心配置与实例化详解
java·开发语言·spring
爱敲代码的小鱼1 小时前
springboot原理篇:
java·spring boot·spring
zzzll11111 小时前
如何学习AI Agent?
java·人工智能·学习·程序员·大模型
阿pin2 小时前
Java随笔-GC收集器工作机制
java·开发语言·jvm·gc
2601_962440842 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
默默敲代码的徐哥儿2 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
折哥的程序人生 · 物流技术专研2 小时前
第2篇:策略模式三大角色拆解与UML
java·设计模式·策略模式·uml·编程入门·行为型模式·扩充系列
李少兄3 小时前
Java CompletableFuture 解析(含常见面试题)
java·开发语言
名字还没想好☜3 小时前
Spring Boot 全局异常处理:@ControllerAdvice 实战
java·spring boot·后端·spring·异常处理