📖 MySQL 命令速查

按使用场景分组,点击"复制"按钮一键复制命令

数据库与用户权限
查看所有数据库
SHOW DATABASES;
创建数据库(utf8mb4)
CREATE DATABASE <db> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
删除数据库 ⚠️
DROP DATABASE <db>;
切换到指定数据库
USE <db>;
创建用户
CREATE USER 'user'@'host' IDENTIFIED BY '密码';
修改用户密码
ALTER USER 'user'@'host' IDENTIFIED BY '新密码';
删除用户 ⚠️
DROP USER 'user'@'host';
授权(指定权限)
GRANT SELECT, INSERT, UPDATE ON <db>.* TO 'user'@'host';
授权(全部权限)⚠️ 最小化原则
GRANT ALL PRIVILEGES ON <db>.* TO 'user'@'host';
撤销权限
REVOKE SELECT ON <db>.* FROM 'user'@'host';
查看用户权限
SHOW GRANTS FOR 'user'@'host';
刷新权限(直接改系统表后需执行)
FLUSH PRIVILEGES;
表结构与字段
查看当前库所有表
SHOW TABLES;
创建表(自增主键 + InnoDB + utf8mb4)
CREATE TABLE <table> (id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64) NOT NULL COMMENT '说明') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
查看建表语句
SHOW CREATE TABLE <table>;
查看表结构
DESC <table>;
新增字段(带注释)
ALTER TABLE <table> ADD COLUMN <col> VARCHAR(64) COMMENT '说明';
修改字段类型
ALTER TABLE <table> MODIFY COLUMN <col> VARCHAR(128);
重命名表
RENAME TABLE <old> TO <new>;
数据写入与分页
覆盖写入(主键冲突时先删后插)⚠️
REPLACE INTO <table> (col1, col2) VALUES (v1, v2);
分页查询(offset, size)
SELECT * FROM <table> LIMIT <offset>, <size>;
分页查询(写法二)
SELECT * FROM <table> LIMIT <size> OFFSET <offset>;
查询全表(限量)
SELECT * FROM <table> LIMIT 10;
索引与执行计划
创建普通索引
ALTER TABLE <table> ADD INDEX idx_<col> (<col>);
创建唯一索引
ALTER TABLE <table> ADD UNIQUE INDEX uk_<col> (<col>);
查看表索引
SHOW INDEX FROM <table>;
查看执行计划
EXPLAIN SELECT * FROM <table> WHERE <col> = <val>;
事务锁与连接排查
查看慢查询开关
SHOW VARIABLES LIKE 'slow_query_log';
开启慢查询(需 SUPER 权限)
SET GLOBAL slow_query_log = ON;
开启事务
`BEGIN;`(或 `START TRANSACTION;`)
查看当前所有连接
SHOW PROCESSLIST;
查看 InnoDB 状态,定位死锁 / 锁等待
SHOW ENGINE INNODB STATUS;
查看运行中事务,找锁持有者
SELECT * FROM information_schema.innodb_trx;
查看表 / 行锁(8.0)
SELECT * FROM performance_schema.data_locks;
查看锁等待关系(8.0)
SELECT * FROM performance_schema.data_lock_waits;
行级锁,锁定后再查改
SELECT * FROM <table> WHERE <col> = <val> FOR UPDATE;
手动锁表 ⚠️ 慎用
LOCK TABLES <table> WRITE;
解锁表
UNLOCK TABLES;