MySQL是最流行的关系型数据库之一,掌握其命令行工具是每位开发者和DBA的必备技能。本教程将带你系统学习MySQL命令行的核心功能和实用技巧。

🚀 连接MySQL服务器
基础连接方式
# 连接到本地MySQL服务器
mysql -u root -p
# 指定主机和端口
mysql -h 127.0.0.1 -P 3306 -u username -p
# 连接后直接选择数据库
mysql -u root -p database_name连接参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
-u | 用户名 | -u admin |
-p | 密码提示 | (回车后输入密码) |
-h | 主机地址 | -h db.example.com |
-P | 端口号 | -P 3307 |
-D | 指定数据库 | -D mydb |
🔍 数据库与表操作
数据库管理
-- 显示所有数据库
SHOW DATABASES;
-- 创建新数据库
CREATE DATABASE school_db;
-- 选择数据库
USE school_db;
-- 删除数据库
DROP DATABASE old_db;表操作
-- 创建学生表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 15),
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 显示所有表
SHOW TABLES;
-- 查看表结构
DESCRIBE students;
-- 修改表结构
ALTER TABLE students ADD COLUMN major VARCHAR(50);
ALTER TABLE students MODIFY COLUMN age TINYINT;
ALTER TABLE students DROP COLUMN email;📊 数据操作(CRUD)
插入数据
INSERT INTO students (name, age)
VALUES
('张三', 18),
('李四', 19),
('王五', 17);查询数据
-- 查询所有数据
SELECT * FROM students;
-- 条件查询
SELECT name, age FROM students WHERE age > 18;
-- 排序和限制
SELECT * FROM students ORDER BY created_at DESC LIMIT 5;
-- 模糊查询
SELECT * FROM students WHERE name LIKE '张%';更新数据
UPDATE students
SET age = 20
WHERE name = '张三';删除数据
DELETE FROM students
WHERE name = '王五';🔧 高级查询技巧
聚合函数
SELECT
COUNT(*) AS total,
AVG(age) AS avg_age,
MIN(created_at) AS oldest,
MAX(age) AS max_age
FROM students;分组统计
SELECT
major,
COUNT(*) AS student_count,
AVG(age) AS avg_age
FROM students
GROUP BY major
HAVING COUNT(*) > 5;表连接
-- 创建课程表
CREATE TABLE courses (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
instructor VARCHAR(50)
);
-- 内连接查询
SELECT s.name, c.name AS course
FROM students s
JOIN courses c ON s.id = c.student_id;👥 用户与权限管理
用户管理
-- 创建新用户
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'password123';
-- 修改密码
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'newpassword456';
-- 删除用户
DROP USER 'dev'@'localhost';权限管理
-- 授予权限
GRANT SELECT, INSERT, UPDATE ON school_db.* TO 'dev'@'localhost';
-- 查看权限
SHOW GRANTS FOR 'dev'@'localhost';
-- 撤销权限
REVOKE UPDATE ON school_db.* FROM 'dev'@'localhost';📤 数据导入导出
导出数据
# 导出整个数据库
mysqldump -u root -p school_db > school_db.sql
# 导出特定表
mysqldump -u root -p school_db students > students.sql
# 导出为CSV格式
mysql -u root -p -e "SELECT * FROM students" school_db > students.csv导入数据
# 导入SQL文件
mysql -u root -p school_db < backup.sql
# 导入CSV数据
mysql -u root -p school_db -e "
LOAD DATA INFILE '/path/to/students.csv'
INTO TABLE students
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;"⚙️ 配置与优化
配置文件(my.cnf)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysql/mysql.pid
# 性能优化
innodb_buffer_pool_size=1G
max_connections=200
query_cache_size=128M性能分析
-- 查看查询执行计划
EXPLAIN SELECT * FROM students WHERE age > 18;
-- 查看进程列表
SHOW PROCESSLIST;
-- 优化表
OPTIMIZE TABLE students;🚨 常见问题解决
忘记root密码
- 停止MySQL服务
- 启动安全模式:
mysqld_safe --skip-grant-tables &- 登录并修改密码:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';- 重启MySQL服务
连接错误
# 错误:ERROR 1045 (28000)
# 解决方案:检查用户名/密码,确保主机权限
# 错误:ERROR 2002 (HY000)
# 解决方案:确认MySQL服务运行中,检查socket路径备份与恢复
# 定时备份脚本
mysqldump -u root -p --all-databases | gzip > /backups/mysql-$(date +%F).sql.gz
# 恢复备份
gunzip < /backups/mysql-2023-01-01.sql.gz | mysql -u root -p💡 实用技巧
批处理模式
mysql -u root -p -e "SHOW DATABASES; SELECT VERSION();"
# 执行SQL脚本
mysql -u root -p < script.sql输出格式化
-- 垂直显示结果
SELECT * FROM students \G
-- 表格格式
SELECT * FROM students \T
-- 导出为HTML
SELECT * FROM students --html命令历史
# 查看历史命令
cat ~/.mysql_history
# 实时监控查询
mysqladmin -u root -p processlist📚 学习资源推荐
通过掌握这些MySQL命令和技巧,你将能够高效地管理和操作数据库。实践是最好的学习方式 - 立即创建你的第一个数据库项目吧!
附录:常用命令速查表
| 类别 | 命令 | 说明 |
|---|---|---|
| 连接 | mysql -u user -p | 连接数据库 |
| 数据库 | SHOW DATABASES; | 显示所有数据库 |
CREATE DATABASE dbname; | 创建数据库 | |
USE dbname; | 选择数据库 | |
| 表操作 | SHOW TABLES; | 显示所有表 |
DESCRIBE tablename; | 查看表结构 | |
ALTER TABLE ... | 修改表结构 | |
| 数据 | SELECT ... FROM ... | 查询数据 |
INSERT INTO ... VALUES ... | 插入数据 | |
UPDATE ... SET ... WHERE ... | 更新数据 | |
DELETE FROM ... WHERE ... | 删除数据 | |
| 用户 | CREATE USER ... | 创建用户 |
GRANT ... ON ... TO ... | 授予权限 | |
| 维护 | SHOW PROCESSLIST; | 查看活动连接 |
EXPLAIN SELECT ... | 分析查询性能 |

