182 个常用命令 · 12 类分组 · 连库表/查询/权限/备份 · 点击复制
返回 ico5.net 在线工具箱 您还可以使用 ADB命令大全 PHP函数大全 Eclipse快捷键大全 3ds Max快捷键大全| 命令 / 语法 | 描述 | 示例 (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); |
| 命令 / 语法 | 描述 | 示例 (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 变量限制,只能写入该变量指定的目录,且目标文件不能已存在 |
| 命令 / 语法 | 描述 | 示例 (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!'; |
| 命令 / 语法 | 描述 | 示例 (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 导入的常用姿势一次记牢。
关键词筛选命令,点击单元格复制到客户端执行。
按连接、库表、查询、权限、备份等分组定位需求。
把示例中的库名、表名、用户名替换为你的实际值。
点击复制到 mysql 客户端或管理工具中执行。
DROP、TRUNCATE、UPDATE 无 WHERE 等操作前务必先备份。
执行 mysqldump -u用户名 -p 库名 > backup.sql,恢复时用 mysql -u用户名 -p 新库名 < backup.sql。大表建议加 --single-transaction 减少锁表影响。
执行 SHOW FULL PROCESSLIST; 可看到当前连接与执行中的语句;配合慢查询日志(slow_query_log)定位耗时 SQL。
用 --skip-grant-tables 方式启动 MySQL 后免密登录重设密码,完成后正常重启。生产环境请严格按官方文档操作,避免安全风险。
CHAR 定长,适合长度固定的值(如国家代码、MD5);VARCHAR 变长按实际长度存储,适合长度波动大的文本。定长列在频繁更新的表中有轻微性能优势。
如果本站工具对你有帮助,欢迎请作者喝杯咖啡