🔌 一、连接 / 帮助 / 退出
功能 | 命令 |
---|---|
连接到 MySQL | bash mysql -h 主机 -u 用户名 -p |
显示帮助 | sql help; 或 sql \h |
退出客户端 | sql quit; / sql exit; / sql \q |
显示连接状态与版本 | sql \s 或 sql STATUS; 或 sql SELECT VERSION(); |
🗃️ 二、数据库(Schema)操作
功能 | 命令 |
---|---|
列出所有数据库 | sql SHOW DATABASES; |
创建数据库 | sql CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET utf8mb4] [COLLATE utf8mb4_unicode_ci]; |
删除数据库 | sql DROP DATABASE [IF EXISTS] db_name; |
切换当前数据库 | sql USE db_name; |
查看当前数据库 | sql SELECT DATABASE(); |
查看建库语句 | sql SHOW CREATE DATABASE db_name; |
💡 推荐字符集:utf8mb4
+ 排序规则:utf8mb4_unicode_ci
📋 三、表(Table)操作
功能 | 命令 |
---|---|
列出当前库所有表 | sql SHOW TABLES; |
查看表结构 | sql DESC table_name; 或 sql SHOW COLUMNS FROM table_name; |
查看建表语句(DDL) | sql SHOW CREATE TABLE table_name\G |
创建表 | sql CREATE TABLE table_name ( id INT PRIMARY KEY, name VARCHAR(100) ) ENGINE=InnoDB CHARSET=utf8mb4; |
删除表 | sql DROP TABLE [IF EXISTS] table_name; |
清空表(保留结构) | sql TRUNCATE TABLE table_name; |
修改表结构 | sql -- 添加列 ALTER TABLE t ADD COLUMN email VARCHAR(255); -- 修改类型 ALTER TABLE t MODIFY COLUMN name VARCHAR(200); -- 重命名列 ALTER TABLE t CHANGE old_name new_name VARCHAR(200); -- 删除列 ALTER TABLE t DROP COLUMN col; -- 重命名表 ALTER TABLE t RENAME TO new_t; -- 添加索引 ALTER TABLE t ADD INDEX idx_name (col1, col2); -- 删除索引 ALTER TABLE t DROP INDEX idx_name; |
💡TRUNCATE
比DELETE FROM table
更快,但不可回滚(非事务安全)
📊 四、数据操作(DML:增删改查)
功能 | 命令 |
---|---|
插入单行 | sql INSERT INTO t (a, b) VALUES (1, 'x'); |
插入多行 | sql INSERT INTO t (a, b) VALUES (1,'x'), (2,'y'), (3,'z'); |
基础查询 | sql SELECT a, b FROM t; |
带条件查询 | sql SELECT * FROM t WHERE a > 10; |
排序 | sql SELECT * FROM t ORDER BY a DESC, b ASC; |
限制结果数量 | sql SELECT * FROM t LIMIT 10; -- 前10行 SELECT * FROM t LIMIT 5, 10; -- 跳过5行,取10行 |
分组聚合 | sql SELECT dept, COUNT(*) FROM emp GROUP BY dept; |
去重 | sql SELECT DISTINCT status FROM orders; |
更新数据 | sql UPDATE t SET name = 'Alice' WHERE id = 1; |
删除数据(带条件) | sql DELETE FROM t WHERE created_at < '2020-01-01'; |
删除全部数据 | sql DELETE FROM t; (可回滚)或 sql TRUNCATE TABLE t; (不可回滚,更快) |
🔍 五、索引 / 约束 / 外键
功能 | 命令 / 说明 |
---|---|
创建普通索引 | sql CREATE INDEX idx_name ON t(col1, col2); |
删除索引 | sql DROP INDEX idx_name ON t; |
添加主键 / 唯一键 | sql ALTER TABLE t ADD PRIMARY KEY(id); ALTER TABLE t ADD UNIQUE uk_email (email); |
添加外键(需 InnoDB) | sql ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; |
查看索引 | sql SHOW INDEX FROM t; |
查看约束(含外键) | sql SHOW CREATE TABLE t; 或查询:sql SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'db_name' AND REFERENCED_TABLE_NAME IS NOT NULL; |
⚠️ 外键仅在 InnoDB 引擎中支持
🔐 六、事务 / 锁 / 并发控制
功能 | 命令 |
---|---|
开始事务 | sql START TRANSACTION; 或 sql BEGIN; |
提交 | sql COMMIT; |
回滚 | sql ROLLBACK; |
保存点 | sql SAVEPOINT sp1; ROLLBACK TO sp1; RELEASE SAVEPOINT sp1; |
锁表(读/写) | sql LOCK TABLES t READ; -- 或 WRITE |
解锁 | sql UNLOCK TABLES; |
设置隔离级别 | sql SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
查看 InnoDB 状态 | sql SHOW ENGINE INNODB STATUS\G |
💡 MySQL 默认隔离级别:REPEATABLE READ
👤 七、用户 / 权限管理
功能 | 命令 |
---|---|
创建用户 | sql CREATE USER 'dev'@'%' IDENTIFIED BY 'pass123'; |
修改密码 | sql ALTER USER 'dev'@'%' IDENTIFIED BY 'newpass'; |
删除用户 | sql DROP USER 'dev'@'%'; |
授予权限 | sql GRANT SELECT, INSERT ON mydb.* TO 'dev'@'%'; |
撤销权限 | sql REVOKE INSERT ON mydb.* FROM 'dev'@'%'; |
刷新权限 | sql FLUSH PRIVILEGES; |
查看用户权限 | sql SHOW GRANTS FOR 'dev'@'%'; |
💡 'user'@'%'
表示允许从任意主机连接
🧩 八、视图 / 存储过程 / 触发器 / 函数
功能 | 命令示例 |
---|---|
创建视图 | sql CREATE VIEW v_active_users AS SELECT id, name FROM users WHERE active = 1; |
删除视图 | sql DROP VIEW IF EXISTS v_active_users; |
查看视图 | sql SHOW CREATE VIEW v_active_users\G |
创建存储过程 | sql DELIMITER $$ CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM users; END$$ DELIMITER ; |
删除存储过程 | sql DROP PROCEDURE IF EXISTS GetUsers; |
创建函数 | sql DELIMITER $$ CREATE FUNCTION AddOne(x INT) RETURNS INT DETERMINISTIC BEGIN RETURN x + 1; END$$ DELIMITER ; |
创建触发器(示例) | sql CREATE TRIGGER tr_log_update BEFORE UPDATE ON users FOR EACH ROW BEGIN INSERT INTO user_log VALUES (OLD.id, NOW()); END; |
查看触发器 | sql SHOW TRIGGERS LIKE 'users'\G |
💡 修改分隔符(DELIMITER
)是为了避免;
被提前解析
💾 九、备份 / 恢复 / 导入导出
功能 | 命令(终端执行) |
---|---|
导出单库 | bash mysqldump -u root -p mydb > mydb.sql |
导出所有库 | bash mysqldump -u root -p --all-databases > all.sql |
导出指定表 | bash mysqldump -u root -p mydb t1 t2 > tables.sql |
导入 SQL | bash mysql -u root -p mydb < mydb.sql |
客户端内导入 | sql source /path/to/file.sql; |
仅导出结构(无数据) | bash mysqldump -u root -p --no-data mydb > schema.sql |
仅导出数据(无建表语句) | bash mysqldump -u root -p --no-create-info mydb t > data.sql |
💡 生产环境建议加 --single-transaction --routines --triggers
🛠️ 十、状态 / 配置 / 调优 / 诊断
功能 | 命令 / 查询 |
---|---|
查看系统变量 | sql SHOW VARIABLES LIKE 'max_connections'; |
查看运行状态 | sql SHOW GLOBAL STATUS LIKE 'Threads_connected'; |
查看错误/警告 | sql SHOW WARNINGS; |
查看活跃连接 | sql SHOW FULL PROCESSLIST; |
终止某个连接 | sql KILL 12345; |
分析查询执行计划 | sql EXPLAIN SELECT * FROM t WHERE id = 1; |
启用慢查询日志(临时) | sql SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; |
查看元数据(列、索引等) | sql SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydb'; |
查看 InnoDB 死锁信息 | sql SHOW ENGINE INNODB STATUS\G (查看 LATEST DETECTED DEADLOCK) |