作者/公号:文哥/文哥AI技术指南
导读:相信很多程序员、数据库新手都有过这样的烦恼:SQL 语句虽然天天用,但有些不常用的命令(如创建索引、修改权限、数据库导出)还是经常记不清参数,每次都要去搜索引擎里搜。
今天,我们把这套为小红书设计的 11 张手账风格 MySQL 常用命令知识卡片 整理成文。它不仅包含核心代码,还通过生动的生活类比(如门禁系统、Excel透视表、搬家打包)帮你深度理解。建议立刻收藏,当作随手查阅的电子速查手册!
🗺️ MySQL 命令全景流程关系图
在开始学习具体命令前,先看这张全景图。MySQL 操作不是孤立的,它是一条完整的流水线:
连接服务 ➔ 数据库操作 ➔ 表操作 ➔ 数据的增删改查 ➔ 索引与权限优化 ➔ 备份与恢复
01. 连接与管理:连通数据库的“开机钥匙”
连接数据库是所有操作的第一步。只有把你的本地客户端和服务器端“握手”接通,才能向引擎下达 SQL 语句。
-
• 一句话白话:把数据库服务器连上,才能开始操作。 -
• 常用写法 (命令行): # 连接本地数据库,按提示输入密码 $ mysql -u root -p # 查看当前数据库版本 mysql> SELECT VERSION(); # 安全退出客户端 mysql> exit; -
• 生活类比:就像打电话——先拨通对方的号码( mysql -u ... -p),接通后询问对方名字(SELECT VERSION()),聊完挂断电话(exit)。 -
• 应用场景:每天早上开始编码时,或是远程连入测试/生产服务器排查数据时。 -
• 避坑指南: -
• ⚠️ -p后面不要直接写明文密码!容易留在 shell 历史记录中导致泄密,敲回车后再输入更安全。 -
• ⚠️ 连接失败时,优先检查 MySQL 端口(默认 3306)是否被占用或防火墙是否放行。
-
02. 数据库操作:给数据安个“家”
在 MySQL 中,数据库(Database)是存放表结构的物理容器。先有库,才能建表存数据。
-
• 一句话白话:先有库,才能建表存数据。 -
• 常用写法: -- 创建一个名为 mydb 的数据库(带字符集) CREATE DATABASE mydb CHARACTER SET utf8mb4; -- 显示服务器上所有的数据库 SHOW DATABASES; -- 切换并进入 mydb 数据库 USE mydb; -- 销毁 mydb 数据库(高危!) DROP DATABASE mydb; -
• 生活类比:就像买地皮盖楼—— CREATE DATABASE是买下一块规划好的地皮,SHOW DATABASES是看看你名下有几块地,USE是人走到其中一块地皮上准备动工,DROP则是用推土机强行夷平这块地。 -
• 应用场景:新项目立项、环境初始化或删除测试用临时库。 -
• 避坑指南: -
• ⚠️ 强烈建议创建数据库时显式指定编码为 utf8mb4,否则插入 emoji 表情或生僻字时会报错! -
• ⚠️ 在执行 DROP DATABASE前一定要核对环境,生产环境切忌误删!
-
03. 表操作:给数据规划“格间”
数据库是地皮,数据表(Table)就是盖在上面的楼房。必须严密规划好每一层楼有几个房间、用来放什么类型的物品。
-
• 一句话白话:表是数据的家,定义好结构才能存东西。 -
• 常用写法: -- 创建一张用户表 users CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ); -- 检查表结构定义 DESCRIBE users; -- 修改表结构:新增“年龄”字段 ALTER TABLE users ADD age INTDEFAULT18; -- 彻底删除 users 表 DROPTABLE users; -
• 生活类比:就像制造货架——建表( CREATE TABLE)是规划货架的每一格放什么(类型与长度限制),查看结构(DESCRIBE)是看产品说明书,修改表(ALTER)是给货架动态焊上一个新格子,删表(DROP)是直接将整个货架扔进垃圾焚烧厂。 -
• 应用场景:设计业务实体(如用户、订单、商品表)、根据产品需求给表加列。 -
• 避坑指南: -
• ⚠️ 主键(PRIMARY KEY)必不可少,通常用自增 AUTO_INCREMENT。 -
• ⚠️ 在百万级以上数据的大表上执行 ALTER TABLE需要极其慎重,可能导致锁表甚至服务宕机!
-
04. 查询数据:在沙里淘出金子
SELECT 是 SQL 的灵魂。通过丰富的条件、排序、分页指令,你能从数以亿计的记录中瞬间提取所需信息。
-
• 一句话白话:从海量数据里找到你需要的信息。 -
• 常用写法: -- 查询 users 表中的所有数据,限制返回前 10 行 SELECT*FROM users LIMIT 10; -- 带条件查询,并按年龄从大到小排序 SELECT name, age FROM users WHERE age >=18ORDERBY age DESC; -- 组合过滤:多条件且只取前 5 条 SELECT name FROM users WHERE email ISNOT NULL LIMIT 5; -- 去重查询 SELECTDISTINCT age FROM users; -
• 生活类比:就像用筛子筛沙子—— SELECT决定你要留下金子(字段)还是普通细沙;WHERE是筛孔的大小(过滤条件);ORDER BY决定按大小顺序装箱;LIMIT则表示你只要装满最上面的 5 斗沙。 -
• 应用场景:数据报表查询、后台数据列表展示、条件检索定位。 -
• 避坑指南: -
• ⚠️ 生产环境严禁使用 SELECT *!只查需要的字段可以节省极大网络带宽与磁盘 I/O。 -
• ⚠️ 分页查询时, LIMIT offset, count若偏移量(offset)过大(如几百万),会导致查询性能崩塌,应用索引覆盖优化。
-
05. 增删改 (CRUD):流动的数据“新陈代谢”
没有静态的数据。通过增(INSERT)、改(UPDATE)、删(DELETE)命令,你的数据库才能活起来。
-
• 一句话白话:数据的增删改,四个字概括所有基础操作。 -
• 常用写法: -- 插入一条新的用户记录 INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com'); -- 修改指定用户的邮箱(注意 WHERE 限定!) UPDATE users SET email = 'new_email@example.com' WHERE id = 1; -- 删除指定用户(注意 WHERE 限定!) DELETE FROM users WHERE id = 1; -
• 生活类比:就像仓库日常进出库—— INSERT是新采购货物入库摆放;UPDATE是修改货物上的价格标签;DELETE是清退残次商品出库。 -
• 应用场景:用户注册(增)、修改密码与绑定手机号(改)、注销账号或清空购物车(删)。 -
• 避坑指南: -
• ⚠️ 【警示】:写 UPDATE和DELETE语句时,第一步先写WHERE!如果不带WHERE限制,整张表的所有数据都会被瞬间修改或清空! -
• ⚠️ DELETE FROM属于物理删除,释放的空间不会被系统立刻还给 OS,频繁增删容易产生表空间碎片。
-
06. 聚合与分组:把复杂数据提炼为“统计表”
当你拥有几十万行订单数据,老板只想知道“每个季度总销售额是多少”。这时,COUNT/SUM/GROUP BY 组合就是最强提炼工具。
-
• 一句话白话:统计汇总、分组分析,让数据开口说话。 -
• 常用写法: -- 统计总用户数 SELECT COUNT(*) FROM users; -- 计算考试总分与平均分 SELECT SUM(score), AVG(score) FROM exams; -- 按部门分组统计人数,并且只保留人数多于 5 的部门 SELECT dep, COUNT(*) FROM staff GROUP BY dep HAVING COUNT(*) > 5; -
• 生活类比:就像使用 Excel 数据透视表——先选中部门列进行分类堆叠( GROUP BY),接着计算每个部门人数(COUNT),最后只保留大于 5 人的大部门(HAVING)。 -
• 应用场景:生成财务周报、统计班级平均成绩、提取高销量商品品类。 -
• 避坑指南: -
• ⚠️ WHERE负责在分组前对原始数据进行过滤,而HAVING负责在分组汇总后对结果进行过滤。两者绝对不能混淆! -
• ⚠️ 在 SELECT中出现的非聚合函数字段(如部门 dep),必须写进后面的GROUP BY中,否则会报错或产生随机错误数据。
-
07. 表连接 (JOIN):拼起碎裂的信息“版图”
为了减少数据冗余,数据库设计通常会做“拆分表”(范式化)。想获得跨表完整信息时,表连接(JOIN)就是架设在两张表之间的物理桥梁。
-
• 一句话白话:把多张表拼在一起,让数据关联起来。 -
• 常用写法: -- 内连接:只返回两表都有的匹配记录(交集) SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; -- 左外连接:以左表为主,右表无匹配补 NULL SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id; -
• 生活类比:就像 Excel 里的 VLOOKUP函数——以“用户ID”作为匹配钥匙,去另一张订单表中把关联的消费金额取回来,最终拼到同一行显示。 -
• 应用场景:查询订单时同步拉出买家昵称、导出包含部门名称的员工表格。 -
• 避坑指南: -
• ⚠️ 连接条件 ON如果不写或写错,可能会引发灾难性的“笛卡尔积”效应,导致查询产生天文数字的重复行,瞬间拖垮内存。 -
• ⚠️ 用于多表 JOIN 的关联列上务必建立索引,否则在大表互连时会产生漫长的大表全表扫描。
-
08. 索引操作:让检索“飞”起来的秘密武器
随着表数据增多,全表扫描会变得越来越慢。给常用检索字段建索引(Index),就如同在厚书后增加拼音字母检索一样。
-
• 一句话白话:给数据库装加速器,让查询飞起来。 -
• 常用写法: -- 在 users 表的 email 列上建立索引 idx_email CREATE INDEX idx_email ON users(email); -- 用 ALTER 语句增加索引 ALTER TABLE users ADD INDEX idx_email(email); -- 删除索引 DROP INDEX idx_email ON users; -- 查看某张表上所有索引定义 SHOW INDEX FROM users; -
• 生活类比:就像给字典制作首字母检索表——不用从第一页开始逐页翻寻,只需通过首字母快速定位到“email”所在的页码,直奔目标行。 -
• 应用场景:高频出现在 WHERE、ORDER BY字段上建索引,以及对主外键列加建索引以加快表关联。 -
• 避坑指南: -
• ⚠️ 索引虽然能大幅提高查询速度,但它需要占用磁盘空间,并且会拖慢 INSERT/UPDATE的写入速度。严禁在每个字段上盲目建索引! -
• ⚠️ 区分度极低(如性别只有男女)或频繁修改的列上不宜建索引。
-
09. 用户与权限:数据库的“门禁系统”
绝不能让所有人共用同一个管理员(root)账号!为安全起见,应遵循最小特权原则,为每个人或服务分配独立权限账号。
-
• 一句话白话:谁可以访问什么,权限管理很重要。 -
• 常用写法: -- 创建一个只限本地登录的账户 admin CREATEUSER'admin'@'localhost' IDENTIFIED BY'pass123'; -- 授予 admin 对 mydb 库下所有表的 SELECT/INSERT 权限 GRANTSELECT, INSERTON mydb.*TO'admin'@'localhost'; -- 撤回 INSERT 权限 REVOKEINSERTON mydb.*FROM'admin'@'localhost'; -- 立即重载刷新服务器内存中的权限授权表 FLUSH PRIVILEGES; -
• 生活类比:就像小区门禁——先在前台登记配发访客卡( CREATE USER),接着开通该卡只能刷 3 楼的权限(GRANT),中途若该人员有变动就收回特定楼层权(REVOKE),并立刻让后台系统更新配置(FLUSH PRIVILEGES)。 -
• 应用场景:新微服务接入数据库配置只读账户、分配临时读写账号给研发同事。 -
• 避坑指南: -
• ⚠️ 务必遵循最小特权原则,绝不可为了贪图省事直接分发 ALL PRIVILEGES! -
• ⚠️ 更改权限后务必执行 FLUSH PRIVILEGES强刷,否则可能会出现权限未立刻在内存生效的莫名报错。
-
10. 备份与恢复:安全防线上的“救生圈”
数据无价,生产环境必须有周密的备份计划。无论是误操作删库,还是服务器硬件损坏,备份文件都是你最后的救命稻草。
-
• 一句话白话:数据无价,定期备份是底线。 -
• 常用写法 (注意部分是系统 Shell 命令): # 1. 导出数据库备份 (在系统 Shell 命令行中运行,非 mysql> 终端) $ mysqldump -u root -p mydb > backup.sql # 2. 导入数据库还原 (在系统 Shell 命令行中运行) $ mysql -u root -p mydb < backup.sql-- 3. 批量载入文本文档数据 (在 mysql> 终端运行,速度极快) mysql> LOAD DATA INFILE 'data.txt' INTO TABLE users; -
• 生活类比:就像搬家打包——先将房屋内所有电器衣物收拾装入防震纸箱封箱( mysqldump导出),到达新家地址后开箱还原摆好(< backup.sql导入)。 -
• 应用场景:服务器整体迁移、生产数据库每日冷备、大批量灌入外部清洗后的 CSV 业务数据。 -
• 避坑指南: -
• ⚠️ mysqldump是系统级二进制命令,必须在 Linux/macOS 的终端 Shell 提示符$下执行,而不是进入mysql>提示符下输入,很多初学者在此踩坑! -
• ⚠️ 物理导入还原会直接重写覆盖当前库中的同名表结构与数据,操作前千万要核实是否是目标开发/测试库,严防二次覆盖悲剧!
-
💡 总结
数据库技术博大精深,但只要抓住这 25 个最核心的常用命令,你就已经拥有了能够应付 90% 场景的利器。学习 SQL 的秘诀是“流程心智”配合“场景代入”,在实际敲代码中多加思考命令背后的数据流转,你会发现它简单清晰,极富逻辑之美!
版权申明:内容来源网络,版权归原创者所有,如有侵权请联系删除
想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

17认证网








