MySQL命令大全

182 个常用命令 · 12 类分组 · 连库表/查询/权限/备份 · 点击复制

返回 ico5.net 在线工具箱 您还可以使用 ADB命令大全 PHP函数大全 Eclipse快捷键大全 3ds Max快捷键大全

MySQL命令大全

共 12 张表 · 182 行 · 浏览器本地运行

一、连接与登录 - 客户端连接、会话信息与退出

命令 / 语法 描述 示例 (Example)
mysql -u <user> -p 以指定用户登录本机 MySQL,回车后输入密码 mysql -u root -p
mysql -h <host> -P <port> -u <user> -p 连接远程主机的指定端口 mysql -h 192.168.1.10 -P 3306 -u root -p
mysql -u <user> -p <dbname> 登录后直接进入指定数据库 mysql -u root -p shop
mysql -u <user> -p -e "<sql>" 不进入交互式,直接执行一条 SQL 后退出 mysql -u root -p -e "SHOW DATABASES;"
mysql --default-character-set=utf8mb4 -u <user> -p 指定客户端字符集连接,避免中文乱码 mysql --default-character-set=utf8mb4 -u root -p shop
SELECT VERSION(); 查看 MySQL 服务器版本号 输出:8.0.36(不同发行版可能带 -log 等后缀)
SELECT USER(); 查看客户端发起连接时使用的「用户名@主机」 输出:root@localhost
SELECT CURRENT_USER(); 查看实际匹配到的授权账号(可能与 USER() 不同) 输出:root@%(当权限行是 % 通配时与 USER() 有差异)
SELECT DATABASE(); 查看当前所在的数据库 输出:shop;若尚未 USE 任何库则返回 NULL
STATUS; 输出当前连接摘要:版本、当前库、字符集、运行时长 说明:客户端内可简写为 \s
SELECT NOW(); 查看服务器当前日期时间(受时区变量影响) 输出:2026-08-07 17:53:03
SOURCE <file.sql>; 在客户端内执行外部 SQL 脚本文件 SOURCE /data/backup/shop.sql;
EXIT; 退出 mysql 客户端 说明:等价于 QUIT; 或 \q
\c 取消当前正在输入、尚未执行的语句 说明:输错长语句时按回车前输入 \c 放弃,无需 Ctrl+C 断开连接

二、数据库管理 - 建库、删库、字符集与库级信息查询

命令 / 语法 描述 示例 (Example)
SHOW DATABASES; 列出当前账号可见的所有数据库 输出:information_schema、mysql、performance_schema、sys 及业务库
SHOW DATABASES LIKE '<pattern>'; 按名称模式过滤数据库列表 SHOW DATABASES LIKE 'shop%';
CREATE DATABASE <db>; 创建数据库(使用服务器默认字符集) CREATE DATABASE shop;
CREATE DATABASE IF NOT EXISTS <db> ... 创建库并显式指定字符集与排序规则(推荐写法) CREATE DATABASE IF NOT EXISTS shop DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE <db>; 切换当前会话的默认数据库 USE shop;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 删除数据库及其全部表,操作不可撤销 DROP DATABASE IF EXISTS shop_test;
ALTER DATABASE <db> ... 修改库的默认字符集(仅影响之后新建的表,已有表不变) ALTER DATABASE shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW CREATE DATABASE <db>; 查看该库完整的 CREATE DATABASE 语句 SHOW CREATE DATABASE shop;
SELECT ... FROM information_schema.TABLES 统计各数据库占用的磁盘空间(MB) SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024,2) AS mb FROM information_schema.TABLES GROUP BY table_schema;
SHOW ENGINES; 列出本实例支持的存储引擎及默认引擎 输出:InnoDB 标记为 DEFAULT,另有 MyISAM、MEMORY、CSV 等
SHOW CHARACTER SET; 列出服务器支持的全部字符集及其默认排序规则 输出:含 utf8mb4、latin1、gbk 等,utf8mb4 为 4 字节完整 UTF-8
SHOW COLLATION LIKE '<pattern>'; 查看某字符集下可用的排序规则 SHOW COLLATION LIKE 'utf8mb4%';
SHOW WARNINGS; 查看上一条语句产生的警告或提示信息 说明:执行后若提示 N warnings,用它看具体原因(如数据被截断)
SHOW ERRORS; 只显示上一条语句产生的错误信息 说明:与 SHOW WARNINGS 相比过滤掉了 Note 与 Warning 级别

三、表结构管理 - 建表、改表、查看结构与复制表

命令 / 语法 描述 示例 (Example)
SHOW TABLES; 列出当前数据库中的所有表 说明:需先 USE 某个库,否则报 No database selected
SHOW TABLES LIKE '<pattern>'; 按名称模式过滤表 SHOW TABLES LIKE 'order_%';
CREATE TABLE <t> (...); 创建数据表并指定引擎与字符集 CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DESC <t>; 快速查看表的列名、类型、是否可空、键与默认值 DESC users;
SHOW CREATE TABLE <t>; 查看完整建表语句(含索引、引擎、字符集) SHOW CREATE TABLE users\G
SHOW FULL COLUMNS FROM <t>; 查看列的详细信息,比 DESC 多出排序规则、权限与注释 SHOW FULL COLUMNS FROM users;
ALTER TABLE <t> ADD COLUMN ... 新增字段,可用 AFTER 指定位置 ALTER TABLE users ADD COLUMN email VARCHAR(100) NOT NULL DEFAULT '' AFTER username;
ALTER TABLE <t> MODIFY COLUMN ... 修改字段的类型或属性(列名不变) ALTER TABLE users MODIFY COLUMN username VARCHAR(80) NOT NULL;
ALTER TABLE <t> CHANGE <old> <new> ... 重命名字段,必须同时写完整的新类型定义 ALTER TABLE users CHANGE username nickname VARCHAR(80) NOT NULL;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 删除字段及其全部数据 ALTER TABLE users DROP COLUMN email;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 重命名表,可一次重命名多张 RENAME TABLE users TO members;
ALTER TABLE <t> COMMENT = '<text>'; 修改表注释 ALTER TABLE users COMMENT = '用户主表';
ALTER TABLE <t> ENGINE=InnoDB; 转换存储引擎,该操作会重建整张表 说明:大表执行耗时长且占用额外磁盘,建议低峰期并预留等量空间
ALTER TABLE <t> CONVERT TO ... 把表及其所有字符列转换为指定字符集 ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 清空表数据,属 DDL 且不可回滚,自增计数归 1 TRUNCATE TABLE logs;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 删除表结构与数据 DROP TABLE IF EXISTS tmp_report;
CREATE TABLE <new> LIKE <old>; 复制表结构(含索引),不含数据 CREATE TABLE users_bak LIKE users;
CREATE TABLE <new> AS SELECT ... 复制结构与数据,但不会复制主键、索引和自增属性 CREATE TABLE users_2026 AS SELECT * FROM users WHERE created_at >= '2026-01-01';

四、索引与约束 - 索引创建删除、主键外键与自增控制

命令 / 语法 描述 示例 (Example)
SHOW INDEX FROM <t>; 查看表上的全部索引及基数、是否唯一等信息 SHOW INDEX FROM users;
CREATE INDEX <idx> ON <t>(<col>); 创建普通(非唯一)索引 CREATE INDEX idx_users_nickname ON users(nickname);
CREATE UNIQUE INDEX <idx> ON <t>(<col>); 创建唯一索引,插入重复值会报错 CREATE UNIQUE INDEX uk_users_email ON users(email);
ALTER TABLE <t> ADD INDEX <idx>(<col>); 用 ALTER 语法加索引,与 CREATE INDEX 等价 ALTER TABLE orders ADD INDEX idx_orders_user(user_id);
CREATE INDEX <idx> ON <t>(<c1>,<c2>); 创建联合索引,查询需遵循最左前缀原则 CREATE INDEX idx_orders_user_time ON orders(user_id, created_at);
CREATE INDEX <idx> ON <t>(<col>(N)); 对长文本列建前缀索引,只索引前 N 个字符 CREATE INDEX idx_users_email_p ON users(email(20));
ALTER TABLE <t> ADD FULLTEXT(<col>); 创建全文索引,InnoDB 自 5.6 起支持,中文需配 ngram ALTER TABLE articles ADD FULLTEXT idx_ft_body(body) WITH PARSER ngram;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 删除指定索引 DROP INDEX idx_users_nickname ON users;
ALTER TABLE <t> ADD PRIMARY KEY (<col>); 为已有表添加主键,列必须非空且值唯一 ALTER TABLE logs ADD PRIMARY KEY (id);
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 删除主键;若该列为 AUTO_INCREMENT 需先去掉自增属性 ALTER TABLE logs DROP PRIMARY KEY;
ALTER TABLE <t> ADD CONSTRAINT ... FOREIGN KEY ... 添加外键约束(仅 InnoDB 生效) ALTER TABLE orders ADD CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 删除外键约束(索引不会一起删除) ALTER TABLE orders DROP FOREIGN KEY fk_orders_user;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 临时关闭外键检查,仅对当前会话有效 说明:常用于导入数据或批量删表,完成后务必设回 1
ALTER TABLE <t> AUTO_INCREMENT = <n>; 重置自增起始值,不能小于表中已有最大值 ALTER TABLE users AUTO_INCREMENT = 10000;
ALTER TABLE <t> ADD UNIQUE (<col>); 添加唯一约束,本质上就是创建唯一索引 ALTER TABLE users ADD UNIQUE (email);

五、数据操作(DML) - 增删改、批量写入与导入导出

命令 / 语法 描述 示例 (Example)
INSERT INTO <t> (<cols>) VALUES (...); 插入一行数据 INSERT INTO users (username, email) VALUES ('tom', 'tom@example.com');
INSERT INTO <t> VALUES (...),(...); 一条语句批量插入多行,比逐条插入快很多 INSERT INTO users (username, email) VALUES ('a','a@x.com'),('b','b@x.com');
INSERT IGNORE INTO <t> ... 主键或唯一键冲突时跳过该行而不报错 INSERT IGNORE INTO users (id, username) VALUES (1, 'tom');
INSERT ... ON DUPLICATE KEY UPDATE ... 冲突时改为更新指定字段,即常说的 upsert INSERT INTO stat (day, pv) VALUES ('2026-08-07', 1) ON DUPLICATE KEY UPDATE pv = pv + 1;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 冲突时先删除旧行再插入新行,会触发删除与级联 说明:自增 ID 会变、未指定的列被重置为默认值,多数场景应优先用 ON DUPLICATE KEY UPDATE
INSERT INTO <t> SELECT ... 把查询结果批量写入另一张表 INSERT INTO users_bak SELECT * FROM users WHERE created_at < '2026-01-01';
UPDATE <t> SET ... WHERE ...; 按条件更新数据,务必带 WHERE UPDATE users SET nickname = '汤姆' WHERE id = 1;
UPDATE <t> SET ... ORDER BY ... LIMIT <n>; 限制单次更新行数,适合大表分批处理 UPDATE logs SET status = 1 WHERE status = 0 ORDER BY id LIMIT 1000;
UPDATE <a> JOIN <b> ON ... SET ... 多表关联更新 UPDATE orders o JOIN users u ON o.user_id = u.id SET o.username = u.nickname;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 按条件删除数据,可回滚(在事务中) DELETE FROM logs WHERE created_at < '2026-01-01';
高危:会删除/覆盖数据或破坏系统,执行前务必确认 分批删除,避免一次删除过多导致长事务与主从延迟 DELETE FROM logs WHERE status = 9 ORDER BY id LIMIT 1000;
高危:会删除/覆盖数据或破坏系统,执行前务必确认 多表关联删除,删除的是 DELETE 后面点名的表 DELETE o FROM orders o JOIN users u ON o.user_id = u.id WHERE u.status = 0;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 从服务器上的文本文件高速导入数据 LOAD DATA INFILE '/var/lib/mysql-files/u.csv' INTO TABLE users FIELDS TERMINATED BY ',' IGNORE 1 LINES;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 从客户端本地文件导入,需服务端与客户端均开启 local_infile LOAD DATA LOCAL INFILE 'C:/data/u.csv' INTO TABLE users FIELDS TERMINATED BY ',';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 把查询结果导出为服务器上的文本文件 说明:受 secure_file_priv 变量限制,只能写入该变量指定的目录,且目标文件不能已存在

六、查询与聚合 - SELECT、连接、分组、子查询与窗口函数

命令 / 语法 描述 示例 (Example)
SELECT * FROM <t>; 查询表中全部字段与数据 说明:生产环境建议列出所需字段,避免 SELECT * 带来的额外 IO 与回表
SELECT <cols> FROM <t> WHERE ...; 按条件查询指定字段 SELECT id, username FROM users WHERE status = 1;
WHERE ... IN / BETWEEN / LIKE 多值、区间与模糊匹配条件 SELECT * FROM orders WHERE status IN (1,2) AND amount BETWEEN 100 AND 500;
ORDER BY <col> [ASC|DESC] 对结果排序,可多列组合 SELECT * FROM orders ORDER BY created_at DESC, id DESC;
LIMIT <n> OFFSET <m> 分页取数,也可写作 LIMIT m, n SELECT * FROM users ORDER BY id LIMIT 20 OFFSET 40;
GROUP BY ... HAVING ... 分组统计并对分组结果过滤(HAVING 在聚合后生效) SELECT user_id, COUNT(*) AS c FROM orders GROUP BY user_id HAVING c > 5;
COUNT / SUM / AVG / MAX / MIN 常用聚合函数 SELECT COUNT(*) AS total, SUM(amount) AS sum_amt, AVG(amount) AS avg_amt FROM orders;
SELECT DISTINCT <col> FROM <t>; 对结果去重 SELECT DISTINCT status FROM orders;
INNER JOIN 内连接,只返回两表都匹配的行 SELECT o.id, u.username FROM orders o INNER JOIN users u ON o.user_id = u.id;
LEFT JOIN 左连接,保留左表全部行,右表无匹配则为 NULL SELECT u.id, u.username, o.id AS order_id FROM users u LEFT JOIN orders o ON u.id = o.user_id;
UNION / UNION ALL 纵向合并多个结果集;UNION 去重,UNION ALL 保留重复且更快 SELECT id FROM users_a UNION ALL SELECT id FROM users_b;
WHERE <col> IN (SELECT ...) 子查询作为条件 SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);
WHERE EXISTS (SELECT ...) 存在性判断,只关心是否有匹配行 SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
CASE WHEN ... THEN ... END 在查询中做条件分支运算 SELECT id, CASE WHEN amount >= 1000 THEN '大额' ELSE '普通' END AS level FROM orders;
ROW_NUMBER() OVER (PARTITION BY ...) 窗口函数,分组内排序编号,需 MySQL 8.0 及以上 SELECT id, user_id, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn FROM orders;
WITH <cte> AS (...) SELECT ... 公用表表达式(CTE),让复杂查询更易读,需 MySQL 8.0 及以上 WITH top_user AS (SELECT user_id, COUNT(*) c FROM orders GROUP BY user_id) SELECT * FROM top_user WHERE c > 10;

七、用户与权限 - 账号创建、授权回收与密码管理

命令 / 语法 描述 示例 (Example)
CREATE USER '<u>'@'<host>' IDENTIFIED BY '<pwd>'; 创建账号,主机部分决定可从哪里连接 CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPwd123!';
SELECT user, host FROM mysql.user; 列出实例中所有账号及其允许的来源主机 输出:root/localhost、mysql.sys/localhost 等系统账号与业务账号
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 授予某库的全部权限;MySQL 8.0 起账号必须先存在 GRANT ALL PRIVILEGES ON shop.* TO 'app'@'192.168.1.%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 按最小权限原则精确授权到表 GRANT SELECT, INSERT, UPDATE ON shop.orders TO 'app'@'192.168.1.%';
SHOW GRANTS FOR '<u>'@'<host>'; 查看某账号已获得的全部权限 SHOW GRANTS FOR 'app'@'192.168.1.%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 回收已授予的权限 REVOKE INSERT, UPDATE ON shop.* FROM 'app'@'192.168.1.%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 重新加载权限表 说明:只有直接 UPDATE/DELETE 修改 mysql 系统表后才需要执行;用 GRANT/REVOKE 时权限即时生效,无需调用
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 修改账号密码(5.7.6+ 与 8.0 的标准做法) ALTER USER 'app'@'192.168.1.%' IDENTIFIED BY 'NewStrongPwd456!';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 另一种改密写法 说明:8.0 仍可用但语义已简化,官方推荐统一使用 ALTER USER;旧版的 PASSWORD() 函数在 8.0 中已被移除
高危:会删除/覆盖数据或破坏系统,执行前务必确认 删除账号及其所有权限 DROP USER 'app'@'192.168.1.%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 重命名账号(含主机部分) RENAME USER 'app'@'localhost' TO 'app'@'127.0.0.1';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 强制账号下次登录时必须修改密码 ALTER USER 'app'@'%' PASSWORD EXPIRE;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 使用角色批量管理权限,需 MySQL 8.0 及以上 CREATE ROLE 'readonly'; GRANT SELECT ON shop.* TO 'readonly'; GRANT 'readonly' TO 'app'@'%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 改用旧版认证插件,解决老客户端连不上 8.0 的问题 ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPwd123!';

八、备份与恢复 - mysqldump 导出、导入还原与迁移

命令 / 语法 描述 示例 (Example)
mysqldump -u <u> -p <db> > <file>.sql 导出单个数据库为 SQL 文件 mysqldump -u root -p shop > shop.sql
mysqldump -u <u> -p --all-databases > <file>.sql 导出实例中的全部数据库 mysqldump -u root -p --all-databases > all.sql
mysqldump -u <u> -p <db> <t1> <t2> > <file>.sql 只导出指定的若干张表 mysqldump -u root -p shop users orders > part.sql
mysqldump --no-data 只导出表结构,不含数据 mysqldump -u root -p --no-data shop > schema.sql
mysqldump --no-create-info 只导出数据,不含建表语句 mysqldump -u root -p --no-create-info shop users > data.sql
mysqldump --single-transaction InnoDB 一致性热备:开启事务快照导出,全程不锁表 mysqldump -u root -p --single-transaction --quick shop > shop.sql
mysqldump --where="<cond>" 按条件导出部分数据 mysqldump -u root -p shop orders --where="created_at >= '2026-01-01'" > part.sql
mysqldump --routines --triggers --events 把存储过程、触发器与事件一并导出 说明:默认的 mysqldump 不包含存储过程与事件,跨库迁移时容易遗漏
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 把 SQL 文件导入指定数据库(目标库需已存在) mysql -u root -p shop < shop.sql
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 在 mysql 客户端内部执行 SQL 文件完成恢复 说明:适合已经登录客户端的场景;Windows 路径请用正斜杠,如 SOURCE D:/bak/shop.sql;
mysqldump ... | gzip > <file>.sql.gz 边导出边压缩,大幅减少备份体积 mysqldump -u root -p --single-transaction shop | gzip > shop.sql.gz
gunzip < <file>.sql.gz | mysql -u <u> -p <db> 解压并直接导入压缩备份 gunzip < shop.sql.gz | mysql -u root -p shop
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 不落地文件,直接把一个实例的库迁移到另一个实例 mysqldump -h db1 -u root -p shop | mysql -h db2 -u root -p shop
mysqlcheck -u <u> -p --auto-repair --check --all-databases 检查并自动修复表(修复功能主要对 MyISAM 有效) mysqlcheck -u root -p --auto-repair --check --all-databases

九、状态与监控 - 连接查看、线程终止与运行时变量

命令 / 语法 描述 示例 (Example)
SHOW PROCESSLIST; 查看当前所有连接及其正在执行的语句 说明:普通账号只能看到自己的连接,看全部需要 PROCESS 权限
SHOW FULL PROCESSLIST; 同上,但显示完整 SQL 而非截断的前 100 个字符 说明:排查慢查询时应使用这个版本,否则长 SQL 会被截断
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 终止指定连接(连同其正在执行的语句一起断开) KILL 12345;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 只终止该连接正在执行的语句,保留连接本身 KILL QUERY 12345;
SHOW STATUS LIKE '<pattern>'; 查看会话级状态计数器 SHOW STATUS LIKE 'Threads%';
SHOW GLOBAL STATUS LIKE '<pattern>'; 查看实例级状态,如运行时长、连接数、慢查询数 SHOW GLOBAL STATUS LIKE 'Slow_queries';
SHOW VARIABLES LIKE '<pattern>'; 查看服务器配置变量的当前值 SHOW VARIABLES LIKE '%char%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 在线修改全局变量,重启后失效 说明:改动只影响新建连接,且不会写回配置文件,需同步修改 my.cnf 才能持久生效
SHOW ENGINE INNODB STATUS; 输出 InnoDB 引擎详细状态,含最近一次死锁信息 说明:客户端中建议加 \G 竖排显示:SHOW ENGINE INNODB STATUS\G
SHOW TABLE STATUS LIKE '<t>'; 查看表的引擎、行数估算、数据与索引大小 SHOW TABLE STATUS LIKE 'orders'\G
SELECT ... FROM information_schema.PROCESSLIST 用 SQL 方式筛选连接,可排序与过滤 SELECT id, user, host, time, info FROM information_schema.PROCESSLIST WHERE command <> 'Sleep' ORDER BY time DESC;
SHOW BINARY LOGS; 列出服务器上现存的二进制日志文件 说明:早期版本名为 SHOW MASTER LOGS,两种写法目前均可用
SHOW MASTER STATUS; 查看主库当前 binlog 文件名与位点 说明:MySQL 8.0.22 起改用 SHOW BINARY LOG STATUS,旧名在 8.4 中已被移除
SHOW REPLICA STATUS; 查看从库复制状态与延迟(8.0.22 前称 SHOW SLAVE STATUS) 说明:重点关注 Replica_IO_Running、Replica_SQL_Running 与 Seconds_Behind_Source 三项

十、性能与优化 - 执行计划、表维护与慢查询分析

命令 / 语法 描述 示例 (Example)
EXPLAIN SELECT ...; 查看查询的执行计划,判断是否走索引 EXPLAIN SELECT * FROM orders WHERE user_id = 100;
EXPLAIN ANALYZE SELECT ...; 真实执行语句并输出各步骤实际耗时,需 MySQL 8.0.18 及以上 EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 100;
EXPLAIN FORMAT=JSON SELECT ...; 以 JSON 输出执行计划,含代价估算等更多细节 EXPLAIN FORMAT=JSON SELECT * FROM orders WHERE user_id = 100\G
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 回收碎片空间;对 InnoDB 实际是重建表 + 更新统计信息 说明:会短暂持有元数据锁并额外占用与表等量的磁盘空间,建议低峰期执行
ANALYZE TABLE <t>; 重新采样索引统计信息,帮助优化器选对索引 ANALYZE TABLE orders;
CHECK TABLE <t>; 检查表是否存在损坏 CHECK TABLE orders;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 修复损坏的表 说明:仅支持 MyISAM、ARCHIVE 与 CSV;InnoDB 表会直接报「storage engine does not support repair」
SHOW VARIABLES LIKE 'slow_query%'; 查看慢查询日志是否开启及日志文件路径 SHOW VARIABLES LIKE 'slow_query%';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 在线开启慢查询日志 SET GLOBAL slow_query_log = 'ON';
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 设置慢查询阈值(秒),支持小数 说明:该设置只对之后新建立的连接生效,已有连接需重连才会应用
mysqldumpslow -s t -t <n> <slow.log> 汇总分析慢查询日志,按耗时排序取前 N 条 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
SELECT * FROM sys.schema_unused_indexes; 列出从未被使用过的索引,可作为清理依据 说明:统计自实例上次启动起累计,运行时间过短时结果不具参考性
SELECT * FROM sys.statement_analysis LIMIT 10; 查看开销最大的 SQL 语句汇总(依赖 performance_schema) SELECT query, exec_count, avg_latency FROM sys.statement_analysis ORDER BY total_latency DESC LIMIT 10;
FLUSH TABLES; 关闭所有已打开的表并清空表缓存 说明:MySQL 8.0 已彻底移除查询缓存,不再有 RESET QUERY CACHE 相关命令

十一、事务与锁 - 事务控制、隔离级别与锁排查

命令 / 语法 描述 示例 (Example)
START TRANSACTION; 显式开启一个事务 说明:等价简写为 BEGIN;,需 InnoDB 等支持事务的引擎
COMMIT; 提交当前事务,使改动持久生效 COMMIT;
ROLLBACK; 回滚当前事务,撤销未提交的改动 说明:DDL 语句(如 CREATE/ALTER/TRUNCATE)会隐式提交,无法回滚
SAVEPOINT <name>; 在事务中设置保存点,便于部分回滚 SAVEPOINT sp1;
ROLLBACK TO <name>; 回滚到指定保存点,保存点之前的操作仍在事务中 ROLLBACK TO sp1;
SET autocommit = 0; 关闭自动提交,之后所有语句都需手动 COMMIT 说明:只对当前会话有效;MySQL 默认 autocommit=1,即每条语句自成事务
SELECT @@autocommit; 查看当前会话的自动提交状态 输出:1 表示开启自动提交,0 表示已关闭
SET SESSION TRANSACTION ISOLATION LEVEL ... 设置当前会话的事务隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT @@transaction_isolation; 查看当前隔离级别(MySQL 5.7.20 前变量名为 tx_isolation) 输出:REPEATABLE-READ,这是 MySQL 的默认隔离级别
SELECT ... FOR UPDATE; 对查询到的行加排他锁,其他事务无法修改 SELECT * FROM orders WHERE id = 100 FOR UPDATE;
SELECT ... FOR SHARE; 对行加共享锁,允许他人读但阻止修改(8.0 语法) 说明:旧写法 LOCK IN SHARE MODE 在 8.0 中仍兼容,但推荐使用 FOR SHARE
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 显式对整表加写锁 LOCK TABLES orders WRITE;
UNLOCK TABLES; 释放由 LOCK TABLES 加上的所有表锁 UNLOCK TABLES;
SELECT * FROM performance_schema.data_locks; 查看当前持有的行锁与表锁明细,需 MySQL 8.0 SELECT object_name, lock_type, lock_mode, lock_status FROM performance_schema.data_locks;
SELECT * FROM sys.innodb_lock_waits; 查看正在发生的锁等待,快速定位阻塞源头 说明:输出中的 blocking_pid 即为阻塞方线程号,可用 KILL 终止
SET innodb_lock_wait_timeout = <n>; 设置行锁等待超时秒数,默认 50 秒 SET innodb_lock_wait_timeout = 10;
注意:会改变数据结构、权限或锁表,请在维护窗口谨慎执行 对实例加全局读锁,使整库进入只读状态 说明:常用于逻辑备份前取一致性快照;会阻塞所有写入,务必尽快 UNLOCK TABLES

十二、常用函数 - 日期、字符串、判空与聚合类内置函数

命令 / 语法 描述 示例 (Example)
NOW() / CURDATE() / CURTIME() 分别取当前日期时间、日期、时间 SELECT NOW(), CURDATE(), CURTIME();
DATE_FORMAT(<date>, '<fmt>') 把日期格式化为指定样式的字符串 SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i') FROM orders;
DATE_ADD() / DATE_SUB() 对日期做加减运算 SELECT DATE_ADD(NOW(), INTERVAL 7 DAY), DATE_SUB(CURDATE(), INTERVAL 1 MONTH);
DATEDIFF(<d1>, <d2>) 计算两个日期相差的天数 SELECT DATEDIFF('2026-08-07', '2026-01-01');
UNIX_TIMESTAMP() / FROM_UNIXTIME() 时间戳与日期时间互相转换 SELECT UNIX_TIMESTAMP(NOW()), FROM_UNIXTIME(1785000000);
CONCAT() / CONCAT_WS() 拼接字符串;CONCAT_WS 可指定分隔符并自动忽略 NULL SELECT CONCAT(province, city), CONCAT_WS('-', province, city) FROM address;
SUBSTRING() / LEFT() / RIGHT() 截取字符串,SUBSTRING 的起始位置从 1 开始 SELECT SUBSTRING(phone, 1, 3), LEFT(phone, 3), RIGHT(phone, 4) FROM users;
REPLACE(<str>, <from>, <to>) 替换字符串中的所有匹配片段 SELECT REPLACE(email, '@old.com', '@new.com') FROM users;
LENGTH() / CHAR_LENGTH() 分别返回字节数与字符数 说明:对中文差异明显:utf8mb4 下 LENGTH('中文')=6,而 CHAR_LENGTH('中文')=2
TRIM() / LTRIM() / RTRIM() 去除字符串两端或单侧的空格 SELECT TRIM(' hello '), LTRIM(' hello'), RTRIM('hello ');
IFNULL(<a>, <b>) / COALESCE(...) 空值替换;COALESCE 支持多个参数,返回第一个非 NULL 值 SELECT IFNULL(nickname, username), COALESCE(nickname, username, '匿名') FROM users;
IF(<cond>, <a>, <b>) 三目条件判断 SELECT id, IF(status = 1, '已支付', '待支付') AS s FROM orders;
CAST(<x> AS <type>) / CONVERT() 显式转换数据类型 SELECT CAST('123' AS UNSIGNED), CONVERT('2026-08-07', DATE);
GROUP_CONCAT(<col>) 把分组内的多行值拼成一个字符串 说明:受 group_concat_max_len 限制(默认 1024 字节),超出会被静默截断
JSON_EXTRACT() 与 -> / ->> 提取 JSON 字段的值,需 MySQL 5.7 及以上 SELECT ext->'$.city', ext->>'$.city' FROM users;
UUID() / MD5() / RAND() 生成唯一标识、计算摘要与取随机数 SELECT UUID(), MD5('123456'), FLOOR(RAND()*100);
ROUND() / FLOOR() / CEIL() 四舍五入、向下取整与向上取整 SELECT ROUND(3.14159, 2), FLOOR(3.9), CEIL(3.1);

示例中的库名、表名、字段名请替换为实际名称;点击表格中任意单元格可复制该格内容;数据仅供参考,实际请以官方最新标准为准。

工具简介

MySQL命令大全收录了 182 个数据库日常管理与开发中最常用的 MySQL 命令和 SQL 语句,按「连接登录、库表操作、增删改查、条件聚合、用户权限、备份恢复、索引优化、性能查看」等 12 类分组整理。

无论是查看表结构、排查慢查询,还是创建用户授权、导出导入数据,都可以在对应分组里找到命令模板,配合示例替换库名表名即可执行,点击任意单元格即可复制。

涉及删库、改表结构的高危命令(DROP、TRUNCATE、ALTER)务必先在测试环境验证并做好备份,生产操作遵循审批流程。

功能特点

🔌 连接与会话

登录、切换库、查看版本与编码等连接操作随手可查。

🗄️ 库表全覆盖

建库建表、改表结构、查看表结构与索引一览无余。

🔎 查询模板

条件查询、多表连接、分组聚合的常用写法直接套用。

🔐 用户与权限

创建用户、授权、回收权限、改密码命令模板齐全。

💾 备份与恢复

mysqldump 导出、source 导入的常用姿势一次记牢。

🔍 搜索复制

关键词筛选命令,点击单元格复制到客户端执行。

使用方法

1选择分类

按连接、库表、查询、权限、备份等分组定位需求。

2替换参数

把示例中的库名、表名、用户名替换为你的实际值。

3复制执行

点击复制到 mysql 客户端或管理工具中执行。

4高危操作先备份

DROP、TRUNCATE、UPDATE 无 WHERE 等操作前务必先备份。

MySQL命令大全常见问题 (FAQ)

mysqldump 如何备份单个数据库?

执行 mysqldump -u用户名 -p 库名 > backup.sql,恢复时用 mysql -u用户名 -p 新库名 < backup.sql。大表建议加 --single-transaction 减少锁表影响。

如何查看 MySQL 当前正在执行的查询?

执行 SHOW FULL PROCESSLIST; 可看到当前连接与执行中的语句;配合慢查询日志(slow_query_log)定位耗时 SQL。

忘记 root 密码怎么办?

用 --skip-grant-tables 方式启动 MySQL 后免密登录重设密码,完成后正常重启。生产环境请严格按官方文档操作,避免安全风险。

CHAR 和 VARCHAR 怎么选?

CHAR 定长,适合长度固定的值(如国家代码、MD5);VARCHAR 变长按实际长度存储,适合长度波动大的文本。定长列在频繁更新的表中有轻微性能优势。