1 ~> MySQL 查看类命令大全
以下是 MySQL 查看命令速查表,涵盖考试/刷题常用场景。
1.1 查看数据库
- 查看所有数据库
show databases;
MySQL 常用命令速查表涵盖数据库操作、表结构管理、数据增删改查、权限管理及进阶查询等内容。包括查看数据库与表结构、创建与删除对象、数据插入更新删除、多表关联查询、事务控制、索引优化、日志管理及内置函数等核心知识点。重点强调 WHERE 条件在修改删除中的必要性,以及 LIMIT、ORDER BY 等查询优化手段。适用于开发调试与运维排查场景。

以下是 MySQL 查看命令速查表,涵盖考试/刷题常用场景。
show databases;
use 数据库名;
select database();
show tables;
desc 表名;
describe 表名; 和 desc
show create table 表名;
show create table 表名\G
select * from 表名;
select 字段名 from 表名;
select user();
show databases;use test_db;show tables;desc t1;show create table t1;以下是 MySQL 最常用的核心命令,按数据库操作、表操作、数据操作、查询操作、权限管理五大类划分。
| 命令分类 | 功能描述 | 具体命令示例 | 关键说明 |
|---|---|---|---|
| 数据库操作 | 创建数据库 | CREATE DATABASE **IF NOT EXISTS** db_name; | IF NOT EXISTS 避免重复创建报错 |
| 数据库操作 | 删除数据库 | DROP DATABASE **IF EXISTS** db_name; | IF EXISTS 避免删除不存在的数据库报错 |
| 数据库操作 | 切换数据库 | USE db_name; | 操作表前必须先切换到目标数据库 |
| 数据库操作 | 查看所有数据库 | SHOW DATABASES; | 列出当前 MySQL 实例中所有数据库 |
| 表操作 | 创建表 | CREATE TABLE tb_name ( id INT **PRIMARY KEY** AUTO_INCREMENT, name VARCHAR(50) **NOT NULL**, age INT **DEFAULT 0** ); | PRIMARY KEY 主键、AUTO_INCREMENT 自增、NOT NULL 非空、DEFAULT 默认值 |
| 表操作 | 删除表 | DROP TABLE **IF EXISTS** tb_name; | 同上,避免删除不存在的表报错 |
| 表操作 | 查看表结构 | DESC tb_name; 或 DESCRIBE tb_name; | 展示表的字段、类型、约束等信息 |
| 表操作 | 修改表名 | ALTER TABLE old_tb_name **RENAME TO** new_tb_name; | RENAME TO 是修改表名的核心关键字 |
| 表操作 | 添加字段 | ALTER TABLE tb_name **ADD COLUMN** email VARCHAR(100); | ADD COLUMN 新增字段,可加约束(如 NOT NULL) |
| 数据操作 | 插入数据 | INSERT INTO tb_name (name, age) **VALUES** ('张三', 20); | VALUES 后接插入的具体值,字段和值需一一对应 |
| 数据操作 | 批量插入数据 | INSERT INTO tb_name (name, age) VALUES ('李四', 22), ('王五', 25); | 批量插入比单条插入效率更高 |
| 数据操作 | 更新数据 | UPDATE tb_name **SET** age=21 **WHERE** name='张三'; | WHERE 必须加,否则更新全表数据 |
| 数据操作 | 删除数据 | DELETE FROM tb_name **WHERE** id=1; | WHERE 必须加,否则删除全表数据 |
| 查询操作 | 基础查询 | SELECT **name, age** FROM tb_name; | name, age 可替换为 * 查询所有字段(不推荐) |
| 查询操作 | 条件查询 | SELECT * FROM tb_name WHERE age **BETWEEN** 20 AND 30; | BETWEEN…AND 范围查询,也可用 > < = != |
| 查询操作 | 排序查询 | SELECT * FROM tb_name **ORDER BY** age **DESC**; | ORDER BY 排序,DESC 降序(默认 ASC 升序) |
| 查询操作 | 分页查询 | SELECT * FROM tb_name **LIMIT** 0, 10; | LIMIT 起始行,行数,起始行从 0 开始 |
| 权限管理 | 创建用户 | CREATE USER 'user1'@'**localhost**' IDENTIFIED BY '123456'; | localhost 限制仅本地访问,% 表示任意主机 |
| 权限管理 | 授权用户 | GRANT **ALL** ON db_name.* TO 'user1'@'localhost'; | ALL 可替换为 SELECT/INSERT 等具体权限 |
| 权限管理 | 刷新权限 | FLUSH **PRIVILEGES**; | 授权/改权限后必须执行,使权限生效 |
SELECT DATABASE();
SHOW CREATE TABLE tb_name; ---- 可查看表的完整创建逻辑(含索引、字符集等)
TRUNCATE TABLE tb_name; -- 比 DELETE 快,且重置自增主键
mysqldump -u root -p db_name > db_backup.sql ---- 备份整个数据库
以下是 MySQL 日常开发 / 运维中高频且实用的其他核心命令,重点内容会标红,涵盖索引操作、数据校验、事务控制、性能优化、系统信息等场景。
| 命令分类 | 功能描述 | 具体命令示例 | 关键说明 |
|---|---|---|---|
| 索引操作 | 创建普通索引 | CREATE **INDEX** idx_name ON tb_name(name); | INDEX 普通索引,提升查询速度(不唯一、非空) |
| 索引操作 | 创建唯一索引 | CREATE **UNIQUE INDEX** idx_age ON tb_name(age); | UNIQUE INDEX 索引值唯一,可避免重复数据 |
| 索引操作 | 删除索引 | DROP **INDEX** idx_name ON tb_name; | 删除无用索引,减少写入性能损耗 |
| 索引操作 | 查看表索引 | SHOW **INDEX** FROM tb_name; | 列出表中所有索引的名称、类型、关联字段等 |
| 事务控制 | 开启事务 | START **TRANSACTION**; 或 BEGIN; | 手动开启事务,用于保证多操作原子性 |
| 事务控制 | 提交事务 | **COMMIT**; | 确认事务内所有操作,永久生效 |
| 事务控制 | 回滚事务 | **ROLLBACK**; | 撤销事务内未提交的所有操作,恢复到事务开始前状态 |
| 事务控制 | 设置保存点 | SAVEPOINT sp1; + ROLLBACK **TO** sp1; | 回滚到事务内指定保存点,而非整个事务 |
| 数据校验/修改 | 去重查询 | SELECT **DISTINCT** name FROM tb_name; | DISTINCT 过滤重复行,仅返回唯一值 |
| 数据校验/修改 | 批量替换字段值 | UPDATE tb_name SET name = **REPLACE**(name, '张三', 'ZhangSan'); | REPLACE 替换字段中指定字符串 |
| 数据校验/修改 | 空值处理 | SELECT * FROM tb_name WHERE age **IS NULL**; | IS NULL 判断空值(不能用 = NULL) |
| 聚合查询 | 统计计数 | SELECT **COUNT(*)** FROM tb_name WHERE age>20; | COUNT(*) 统计行数,也可用 COUNT(字段) 排除 NULL |
| 聚合查询 | 求和/平均值 | SELECT **SUM(age)**, **AVG(age)** FROM tb_name; | SUM 求和、AVG 求平均 |
| 聚合查询 | 分组查询 | SELECT age, **COUNT(*)** FROM tb_name **GROUP BY** age; | GROUP BY 按字段分组,常配合聚合函数 |
| 性能优化 | 查看 SQL 执行计划 | EXPLAIN **SELECT * FROM tb_name WHERE name='张三';** | EXPLAIN 分析 SQL 是否走索引、扫描行数等 |
| 性能优化 | 查看慢查询日志状态 | SHOW VARIABLES LIKE '**slow_query_log**'; | 检查慢查询日志是否开启,定位低效 SQL |
| 性能优化 | 查看当前连接数 | SHOW **PROCESSLIST**; | 查看所有数据库连接,排查慢连接、锁等待问题 |
| 系统信息 | 查看 MySQL 版本 | SELECT **VERSION();** | 确认 MySQL 版本,适配不同版本的语法差异 |
| 系统信息 | 查看当前用户 | SELECT **USER();** | 查看当前登录的 MySQL 用户及主机 |
| 系统信息 | 查看字符集配置 | SHOW VARIABLES LIKE '**character_set%**'; | 检查数据库/表/连接的字符集,避免乱码问题 |
| 表结构修改 | 修改字段类型 | ALTER TABLE tb_name **MODIFY COLUMN** name VARCHAR(100); | MODIFY COLUMN 修改字段类型/长度 |
| 表结构修改 | 删除字段 | ALTER TABLE tb_name **DROP COLUMN** email; | DROP COLUMN 删除表中无用字段 |
| 锁操作 | 查看表锁状态 | SHOW **OPEN TABLES** WHERE In_use>0; | 查看被锁定的表,排查锁阻塞问题 |
| 锁操作 | 手动锁表/解锁 | LOCK TABLES tb_name **READ**; + UNLOCK TABLES; | READ 读锁(仅读),也可用 WRITE 写锁(独占) |
| 场景 | 命令示例 | 说明 |
|---|---|---|
| 导入 SQL 文件 | mysql -u root -p db_name < **backup.sql** | 将备份的 SQL 文件导入指定数据库(终端执行) |
| 修复损坏的表 | REPAIR TABLE tb_name; | MyISAM 表损坏时修复(InnoDB 表优先用事务回滚) |
| 设置自动提交事务 | SET **autocommit** = 0; | 关闭自动提交,需手动 COMMIT/ROLLBACK(默认 1=开启) |
| 查看表占用空间 | SELECT table_name, data_length/1024/1024 AS size_mb FROM information_schema.tables WHERE table_schema='db_name'; | 统计数据库中各表的大小(单位 MB) |
CREATE INDEX / DROP INDEX)、事务控制(COMMIT / ROLLBACK)、执行计划(EXPLAIN)是优化查询的核心,必须掌握;SHOW PROCESSLIST(查连接)、EXPLAIN(分析 SQL)、字符集检查(character_set%)能快速定位性能 / 乱码问题;DISTINCT 去重、IS NULL 判空能保证数据校验的准确性。| 命令分类 | 功能描述 | 具体命令示例 | 关键说明 |
|---|---|---|---|
| 高级查询 | 多表关联查询(内连接) | SELECT a.name, b.order_no FROM user a **INNER JOIN** order b ON a.id = b.user_id; | INNER JOIN 只返回两表匹配的数据,也可用 JOIN 简写 |
| 高级查询 | 多表关联查询(左连接) | SELECT a.name, b.order_no FROM user a **LEFT JOIN** order b ON a.id = b.user_id; | LEFT JOIN 保留左表所有数据,右表无匹配则为 NULL |
| 高级查询 | 子查询(IN) | SELECT * FROM user WHERE id **IN** (SELECT user_id FROM order WHERE amount>100); | IN 子查询,适合小数据集;大数据集用 JOIN 更高效 |
| 高级查询 | 条件过滤(HAVING) | SELECT age, COUNT(*) FROM user GROUP BY age **HAVING** COUNT(*)>5; | HAVING 过滤分组后的数据(WHERE 过滤分组前) |
| 用户权限细化 | 回收用户权限 | REVOKE **DELETE** ON db_name.* FROM 'user1'@'localhost'; | REVOKE 撤销指定权限,需 FLUSH PRIVILEGES 生效 |
| 用户权限细化 | 修改用户密码 | ALTER USER 'user1'@'localhost' **IDENTIFIED BY** 'new_password'; | MySQL8.0+ 推荐用 ALTER USER,5.7 可用 SET PASSWORD |
| 用户权限细化 | 删除用户 | DROP USER **IF EXISTS** 'user1'@'localhost'; | IF EXISTS 避免删除不存在的用户报错 |
| 表维护 | 优化表(整理碎片) | OPTIMIZE **TABLE** tb_name; | 针对 InnoDB/MyISAM 表整理碎片,释放磁盘空间(需锁表,低峰执行) |
| 表维护 | 重命名字段 | ALTER TABLE tb_name **RENAME COLUMN** old_col TO new_col; | MySQL8.0+ 支持,低版本需先 MODIFY 再 DROP 旧字段 |
| 表维护 | 复制表结构(不含数据) | CREATE TABLE new_tb **LIKE** old_tb; | LIKE 复制原表所有结构(索引、约束等) |
| 表维护 | 复制表结构 + 数据 | CREATE TABLE new_tb SELECT * FROM old_tb **WHERE 1=2**; | WHERE 1=2 只复制结构;去掉则复制结构 + 数据 |
| 日志管理 | 开启慢查询日志 | SET GLOBAL **slow_query_log** = 1; | 临时开启(重启失效),永久生效需改 my.cnf 配置 |
| 日志管理 | 设置慢查询阈值 | SET GLOBAL **long_query_time** = 1; | 执行时间超过 1 秒的 SQL 会被记录到慢查询日志(默认 10 秒) |
| 日志管理 | 查看二进制日志(binlog) | SHOW **BINARY LOGS**; | 查看 binlog 文件列表,用于数据恢复/主从同步 |
| 变量配置 | 查看全局变量 | SHOW **GLOBAL VARIABLES** LIKE 'max_connections'; | 查看 MySQL 全局配置(如最大连接数) |
| 变量配置 | 修改会话变量 | SET **SESSION** sort_buffer_size = 1024*1024; | 仅对当前连接生效,不影响其他会话 |
| 变量配置 | 查看当前会话状态 | SHOW **SESSION STATUS** LIKE 'Threads%'; | 查看当前会话的资源使用、连接数等状态 |
| 数据导入导出 | 导出指定表数据(CSV) | SELECT * FROM tb_name INTO **OUTFILE** '/tmp/tb_data.csv' FIELDS TERMINATED BY ','; | 导出为 CSV 文件,需确保 MySQL 有文件写入权限 |
| 数据导入导出 | 导入 CSV 数据到表 | LOAD **DATA INFILE** '/tmp/tb_data.csv' INTO TABLE tb_name FIELDS TERMINATED BY ','; | 批量导入 CSV 数据,比 INSERT 高效 |
| 锁与事务 | 设置事务隔离级别 | SET **TRANSACTION ISOLATION LEVEL** READ COMMITTED; | 常用级别:READ COMMITTED(默认)、REPEATABLE READ、SERIALIZABLE |
| 锁与事务 | 查看事务等待锁 | SELECT * FROM **INFORMATION_SCHEMA.INNODB_LOCK_WAITS**; | 定位事务锁等待问题,排查死锁 |
| 函数类型 | 功能描述 | 命令示例 | 说明 |
|---|---|---|---|
| 日期函数 | 格式化日期 | SELECT **DATE_FORMAT**(create_time, '%Y-%m-%d') FROM tb_name; | 按指定格式输出日期(%Y 年、%m 月、%d 日) |
| 日期函数 | 计算日期差 | SELECT **DATEDIFF**(NOW(), create_time) FROM tb_name; | 计算当前时间与 create_time 的天数差 |
| 字符串函数 | 截取字符串 | SELECT **SUBSTRING**(name, 1, 2) FROM tb_name; | 截取 name 字段前 2 个字符(起始位置从 1 开始) |
| 字符串函数 | 拼接字符串 | SELECT **CONCAT**(name, '-', age) FROM tb_name; | 拼接多个字段/字符串(NULL 参与则结果为 NULL) |
| 数值函数 | 四舍五入 | SELECT **ROUND**(price, 2) FROM tb_name; | 将 price 保留 2 位小数 |
| 数值函数 | 取绝对值 | SELECT **ABS**(amount) FROM tb_name; | 计算数值的绝对值 |
INNER JOIN / LEFT JOIN 是多表关联的基础,HAVING 补充分组后过滤,子查询适合简单场景、JOIN 适合大数据集;OPTIMIZE TABLE 优化表碎片、慢查询日志(slow_query_log)定位低效 SQL、INNODB_LOCK_WAITS 排查死锁,是日常维护必备;LOAD DATA INFILE / INTO OUTFILE 批量导入导出数据,比单条 INSERT / SELECT 高效数倍;内置函数(DATE_FORMAT / CONCAT)能减少应用层数据处理工作量。这些命令覆盖了从开发写复杂查询到运维排查问题的全链路,根据自己的使用场景(比如写报表 SQL、排查锁问题、批量导入数据)重点记忆对应的命令。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online