MYSQL命令大全

182个常用MySQL命令速查表,覆盖连接、库表、索引、DML、查询、权限、备份、事务等12大类,含中文说明与示例,一键复制。

MySQL 命令大全
182 个常用MySQL命令 · 库表/索引/DML/查询/权限/备份/事务 全场景覆盖

连接与登录客户端连接、会话信息与退出 · 14 条

命令 / 语法描述示例 (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 断开连接

数据库管理建库、删库、字符集与库级信息查询 · 14 条

命令 / 语法描述示例 (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 <db>;删除数据库及其全部表,操作不可撤销 高危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 级别

表结构管理建表、改表、查看结构与复制表 · 18 条

命令 / 语法描述示例 (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 <t> DROP COLUMN <col>;删除字段及其全部数据 高危ALTER TABLE users DROP COLUMN email;
RENAME TABLE <old> TO <new>;重命名表,可一次重命名多张 注意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;
TRUNCATE TABLE <t>;清空表数据,属 DDL 且不可回滚,自增计数归 1 高危TRUNCATE TABLE logs;
DROP TABLE IF EXISTS <t>;删除表结构与数据 高危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';

索引与约束索引创建删除、主键外键与自增控制 · 15 条

命令 / 语法描述示例 (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 起支持,中文需配 ngramALTER TABLE articles ADD FULLTEXT idx_ft_body(body) WITH PARSER ngram;
DROP INDEX <idx> ON <t>;删除指定索引 注意DROP INDEX idx_users_nickname ON users;
ALTER TABLE <t> ADD PRIMARY KEY (<col>);为已有表添加主键,列必须非空且值唯一ALTER TABLE logs ADD PRIMARY KEY (id);
ALTER TABLE <t> DROP PRIMARY KEY;删除主键;若该列为 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 <t> DROP FOREIGN KEY <name>;删除外键约束(索引不会一起删除) 注意ALTER TABLE orders DROP FOREIGN KEY fk_orders_user;
SET FOREIGN_KEY_CHECKS = 0;临时关闭外键检查,仅对当前会话有效 注意说明:常用于导入数据或批量删表,完成后务必设回 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)增删改、批量写入与导入导出 · 15 条

命令 / 语法描述示例 (Example)操作
INSERT INTO <t> (<cols>) VALUES (...);插入一行数据INSERT INTO users (username, email) VALUES ('tom', '[email protected]');
INSERT INTO <t> VALUES (...),(...);一条语句批量插入多行,比逐条插入快很多INSERT INTO users (username, email) VALUES ('a','[email protected]'),('b','[email protected]');
INSERT IGNORE INTO <t> ...主键或唯一键冲突时跳过该行而不报错INSERT IGNORE INTO users (id, username) VALUES (1, 'tom');
INSERT ... ON DUPLICATE KEY UPDATE ...冲突时改为更新指定字段,即常说的 upsertINSERT INTO stat (day, pv) VALUES ('2026-08-07', 1) ON DUPLICATE KEY UPDATE pv = pv + 1;
REPLACE INTO <t> ...冲突时先删除旧行再插入新行,会触发删除与级联 注意说明:自增 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 ...;按条件更新数据,务必带 WHEREUPDATE 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 <t> WHERE ...;按条件删除数据,可回滚(在事务中) 高危DELETE FROM logs WHERE created_at < '2026-01-01';
DELETE FROM <t> ORDER BY ... LIMIT <n>;分批删除,避免一次删除过多导致长事务与主从延迟 高危DELETE FROM logs WHERE status = 9 ORDER BY id LIMIT 1000;
DELETE <a> FROM <a> JOIN <b> ON ...多表关联删除,删除的是 DELETE 后面点名的表 高危DELETE o FROM orders o JOIN users u ON o.user_id = u.id WHERE u.status = 0;
LOAD DATA INFILE ...从服务器上的文本文件高速导入数据 注意LOAD DATA INFILE '/var/lib/mysql-files/u.csv' INTO TABLE users FIELDS TERMINATED BY ',' IGNORE 1 LINES;
LOAD DATA LOCAL INFILE ...从客户端本地文件导入,需服务端与客户端均开启 local_infile 注意LOAD DATA LOCAL INFILE 'C:/data/u.csv' INTO TABLE users FIELDS TERMINATED BY ',';
SELECT ... INTO OUTFILE ...把查询结果导出为服务器上的文本文件 注意说明:受 secure_file_priv 变量限制,只能写入该变量指定的目录,且目标文件不能已存在

查询与聚合SELECT、连接、分组、子查询与窗口函数 · 16 条

命令 / 语法描述示例 (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, nSELECT * 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左连接,保留左表全部行,右表无匹配则为 NULLSELECT 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;

用户与权限账号创建、授权回收与密码管理 · 14 条

命令 / 语法描述示例 (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 等系统账号与业务账号
GRANT ALL PRIVILEGES ON <db>.* TO '<u>'@'<host>';授予某库的全部权限;MySQL 8.0 起账号必须先存在 注意GRANT ALL PRIVILEGES ON shop.* TO 'app'@'192.168.1.%';
GRANT <priv1>,<priv2> ON <db>.<t> TO ...按最小权限原则精确授权到表 注意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 <priv> ON <db>.* FROM '<u>'@'<host>';回收已授予的权限 注意REVOKE INSERT, UPDATE ON shop.* FROM 'app'@'192.168.1.%';
FLUSH PRIVILEGES;重新加载权限表 注意说明:只有直接 UPDATE/DELETE 修改 mysql 系统表后才需要执行;用 GRANT/REVOKE 时权限即时生效,无需调用
ALTER USER '<u>'@'<host>' IDENTIFIED BY '<newpwd>';修改账号密码(5.7.6+ 与 8.0 的标准做法) 注意ALTER USER 'app'@'192.168.1.%' IDENTIFIED BY 'NewStrongPwd456!';
SET PASSWORD FOR '<u>'@'<host>' = '<pwd>';另一种改密写法 注意说明:8.0 仍可用但语义已简化,官方推荐统一使用 ALTER USER;旧版的 PASSWORD() 函数在 8.0 中已被移除
DROP USER '<u>'@'<host>';删除账号及其所有权限 高危DROP USER 'app'@'192.168.1.%';
RENAME USER '<old>' TO '<new>';重命名账号(含主机部分) 注意RENAME USER 'app'@'localhost' TO 'app'@'127.0.0.1';
ALTER USER '<u>'@'<host>' PASSWORD EXPIRE;强制账号下次登录时必须修改密码 注意ALTER USER 'app'@'%' PASSWORD EXPIRE;
CREATE ROLE / GRANT <role> TO <user>使用角色批量管理权限,需 MySQL 8.0 及以上 注意CREATE ROLE 'readonly'; GRANT SELECT ON shop.* TO 'readonly'; GRANT 'readonly' TO 'app'@'%';
ALTER USER ... IDENTIFIED WITH mysql_native_password BY '<pwd>';改用旧版认证插件,解决老客户端连不上 8.0 的问题 注意ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPwd123!';

备份与恢复mysqldump 导出、导入还原与迁移 · 14 条

命令 / 语法描述示例 (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-transactionInnoDB 一致性热备:开启事务快照导出,全程不锁表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 不包含存储过程与事件,跨库迁移时容易遗漏
mysql -u <u> -p <db> < <file>.sql把 SQL 文件导入指定数据库(目标库需已存在) 注意mysql -u root -p shop < shop.sql
SOURCE <file>.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 ... | mysql -h <host2> ...不落地文件,直接把一个实例的库迁移到另一个实例 注意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

状态与监控连接查看、线程终止与运行时变量 · 14 条

命令 / 语法描述示例 (Example)操作
SHOW PROCESSLIST;查看当前所有连接及其正在执行的语句说明:普通账号只能看到自己的连接,看全部需要 PROCESS 权限
SHOW FULL PROCESSLIST;同上,但显示完整 SQL 而非截断的前 100 个字符说明:排查慢查询时应使用这个版本,否则长 SQL 会被截断
KILL <id>;终止指定连接(连同其正在执行的语句一起断开) 注意KILL 12345;
KILL QUERY <id>;只终止该连接正在执行的语句,保留连接本身 注意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%';
SET GLOBAL <var> = <value>;在线修改全局变量,重启后失效 注意说明:改动只影响新建连接,且不会写回配置文件,需同步修改 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 三项

性能与优化执行计划、表维护与慢查询分析 · 14 条

命令 / 语法描述示例 (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
OPTIMIZE TABLE <t>;回收碎片空间;对 InnoDB 实际是重建表 + 更新统计信息 注意说明:会短暂持有元数据锁并额外占用与表等量的磁盘空间,建议低峰期执行
ANALYZE TABLE <t>;重新采样索引统计信息,帮助优化器选对索引ANALYZE TABLE orders;
CHECK TABLE <t>;检查表是否存在损坏CHECK TABLE orders;
REPAIR TABLE <t>;修复损坏的表 注意说明:仅支持 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';在线开启慢查询日志 注意SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = <n>;设置慢查询阈值(秒),支持小数 注意说明:该设置只对之后新建立的连接生效,已有连接需重连才会应用
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 相关命令

事务与锁事务控制、隔离级别与锁排查 · 17 条

命令 / 语法描述示例 (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 <t> WRITE;显式对整表加写锁 注意LOCK TABLES orders WRITE;
UNLOCK TABLES;释放由 LOCK TABLES 加上的所有表锁UNLOCK TABLES;
SELECT * FROM performance_schema.data_locks;查看当前持有的行锁与表锁明细,需 MySQL 8.0SELECT 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;
FLUSH TABLES WITH READ LOCK;对实例加全局读锁,使整库进入只读状态 注意说明:常用于逻辑备份前取一致性快照;会阻塞所有写入,务必尽快 UNLOCK TABLES

常用函数日期、字符串、判空与聚合类内置函数 · 17 条

命令 / 语法描述示例 (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 可指定分隔符并自动忽略 NULLSELECT 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 5.7 / 8.0 · 部分命令需 root 或相应权限,执行删除/授权类命令前请确认影响范围
对 DROP、TRUNCATE、DELETE 不带 WHERE 等高危操作已标注风险提示共 182 条命令,全部内容服务端渲染,搜索与复制在浏览器本地完成

工具介绍

MYSQL命令大全是一份面向开发、DBA 与 MySQL 初学者的命令速查表。它把日常最高频的操作按连接与登录、数据库管理、表结构管理、索引与约束、数据操作(DML)、查询与聚合、用户与权限、备份与恢复、状态与监控、性能与优化、事务与锁、常用函数共 12 大类归纳整理,每条命令都配有中文说明和可直接套用的示例。

本表对 DROP、TRUNCATE、不带 WHERE 的 DELETE 等高危操作做了明确标注,执行前请务必确认影响范围。你可以用顶部搜索框按关键词过滤,或用分类标签快速定位,点击复制按钮即可把命令复制到剪贴板,粘贴进 mysql 客户端直接执行。

MYSQL命令大全MYSQL命令速查MySQL常用命令mysql教程数据库命令sql命令mysql运维mysql备份

界面展示

MYSQL命令大全 界面截图

功能亮点

  • 命令齐全:覆盖连接、库表、索引、增删改查、权限、备份、事务等全部日常场景
  • 可运行示例:带参数的命令均给出完整示例,改个库名表名即可执行
  • 分类归纳:12 个大类 182 条命令,从建库建表到性能优化一站查全
  • 一键复制:点击复制按钮即可把命令复制到剪贴板,免手敲、免拼错
  • 实时搜索:支持按命令、说明或示例中的任意关键词过滤
  • 风险提示:对 DROP、TRUNCATE、无 WHERE 的 DELETE 等高危操作给出注意事项
  • 响应式设计:适配桌面与移动端,手机上也能随时查阅
  • 本地处理:全部内容在浏览器本地渲染,不上传、不收集任何数据

使用方法

  1. 浏览命令列表:在表格中按 12 个分类依次浏览全部 MySQL 命令
  2. 搜索或筛选:输入关键词(如 grant、索引、备份),或直接点击分类标签
  3. 查看说明:每条命令都有中文用途解释,并标注适用场景与注意点
  4. 参考示例:等宽代码是可直接运行的命令,替换库名/表名/字段名即可
  5. 复制执行:点击复制按钮,粘贴进 mysql 客户端执行;删除、授权类命令请先确认影响范围

适合人群

  • 后端开发工程师:日常建表、写查询、调索引
  • DBA / 运维工程师:权限管理、备份恢复、性能优化
  • MySQL 初学者:正在系统学习 SQL 与数据库管理的学生
  • 数据分析师:需要快速查阅聚合、窗口函数与导出命令
  • 技术面试备考者:复习事务隔离级别、索引原理等高频考点

常见问题解答(FAQ)

DROP、DELETE、TRUNCATE 有什么区别?
DELETE 逐行删除、可带 WHERE、写日志可回滚;TRUNCATE 清空整表、重置自增、速度快但不可回滚;DROP 直接删除表结构与数据。生产环境执行前务必备份,TRUNCATE/DROP 属高危操作。
怎么安全地执行不带条件的 UPDATE/DELETE?
先开事务验证:BEGIN 后执行语句,用 SELECT 确认影响行数是否符合预期,再 COMMIT;不对就 ROLLBACK。也可设置 sql_safe_updates=1 强制要求 WHERE 带索引列。
MYSQLDUMP 备份怎么恢复?
导出:mysqldump -u root -p db > db.sql;恢复:mysql -u root -p db < db.sql。整库含建表语句,恢复前目标库可为空;只恢复单表可在导出时指定表名。
怎么查看与优化慢查询?
先确认 slow_query_log 开启与 long_query_time 阈值,从慢日志定位 SQL;再用 EXPLAIN 查看执行计划,关注 type(避免 ALL 全表扫)、key(是否走索引)、rows(扫描行数)。
索引为什么没有被使用?
常见原因:对索引列做函数或运算、隐式类型转换、前导模糊 LIKE '%x'、OR 连接非索引列、区分度太低优化器放弃。用 EXPLAIN 确认,必要时改写 SQL 或建联合索引。
CHAR 和 VARCHAR 怎么选?
CHAR 定长,适合长度固定(如 MD5、国家码),存取效率高;VARCHAR 变长省空间,适合长度波动大的文本。注意两者尾部空格处理有差异。
事务隔离级别有哪些?
READ UNCOMMITTED(脏读)、READ COMMITTED(不可重复读)、REPEATABLE READ(MySQL 默认,InnoDB 借 MVCC 与间隙锁基本避免幻读)、SERIALIZABLE(完全串行)。用 SELECT @@transaction_isolation 查看当前级别。
怎么新建用户并授权?
CREATE USER 'app'@'%' IDENTIFIED BY '密码'; 然后 GRANT SELECT,INSERT ON db.* TO 'app'@'%'; FLUSH PRIVILEGES;。MySQL 8 授权时不能自动建用户,需先 CREATE USER。
UTF8 和 UTF8MB4 有什么区别?
MySQL 的 utf8 最多 3 字节,存不了 emoji 等 4 字节字符;utf8mb4 才是完整 UTF-8。新项目一律用 utf8mb4,连接串也设置对应字符集,避免写入报错或乱码。
怎么查看当前连接与杀掉会话?
SHOW PROCESSLIST 查看连接与正在执行的语句;KILL <Id> 终止指定线程;SHOW STATUS LIKE 'Threads_connected' 看当前连接数。长时间 Running 的查询要结合 information_schema 分析。

更新日期:2026-11-03