1. MySQL 基础命令解析
MySQL 作为最流行的开源关系型数据库,其命令行操作是每位开发者必须掌握的技能。我们先从最基础的连接和数据库操作开始讲起。
1.1 连接与退出命令
连接 MySQL 服务器的基本命令格式为:
bash复制mysql -h 主机名 -u 用户名 -p
其中:
-h参数指定服务器地址(本地可省略)-u指定用户名(root 或其他授权用户)-p表示需要输入密码
注意:生产环境强烈建议不要直接使用 root 账户操作,应该为每个应用创建专用账户并分配最小必要权限。
退出 MySQL 命令行客户端有三种方式:
sql复制exit;
quit;
\q
1.2 数据库级操作命令
查看所有数据库:
sql复制SHOW DATABASES;
创建新数据库(指定字符集):
sql复制CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
切换当前数据库:
sql复制USE database_name;
删除数据库(谨慎使用):
sql复制DROP DATABASE database_name;
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 表操作命令详解
2.1 表的创建与结构查看
创建表的基本语法:
sql复制CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_username (username)
) ENGINE=InnoDB;
查看表结构:
sql复制DESCRIBE table_name;
-- 或
SHOW COLUMNS FROM table_name;
查看更详细的建表语句:
sql复制SHOW CREATE TABLE table_name;
2.2 表修改命令
添加列:
sql复制ALTER TABLE users ADD COLUMN age TINYINT UNSIGNED AFTER username;
修改列定义:
sql复制ALTER TABLE users MODIFY COLUMN email VARCHAR(150);
删除列:
sql复制ALTER TABLE users DROP COLUMN age;
重命名表:
sql复制RENAME TABLE old_name TO new_name;
-- 或
ALTER TABLE old_name RENAME TO new_name;
3. 数据操作命令(DML)
3.1 增删改查基础
插入数据:
sql复制-- 单条插入
INSERT INTO users (username, email) VALUES ('john', 'john@example.com');
-- 批量插入
INSERT INTO users (username, email) VALUES
('alice', 'alice@example.com'),
('bob', 'bob@example.com');
查询数据:
sql复制-- 基础查询
SELECT * FROM users WHERE id > 10 ORDER BY created_at DESC LIMIT 5;
-- 带条件查询
SELECT username, email FROM users
WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31'
AND email LIKE '%@gmail.com';
更新数据:
sql复制UPDATE users SET email = 'new_email@example.com' WHERE id = 1;
删除数据:
sql复制DELETE FROM users WHERE id = 1;
3.2 高级查询技巧
多表连接查询:
sql复制SELECT u.username, o.order_date, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.status = 'completed';
分组聚合:
sql复制SELECT
DATE(created_at) AS date,
COUNT(*) AS user_count,
MAX(age) AS max_age
FROM users
GROUP BY DATE(created_at)
HAVING COUNT(*) > 5;
子查询:
sql复制SELECT username
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);
4. 索引与性能优化命令
4.1 索引管理
查看表索引:
sql复制SHOW INDEX FROM table_name;
创建索引:
sql复制-- 单列索引
CREATE INDEX idx_email ON users(email);
-- 复合索引
CREATE INDEX idx_name_age ON users(username, age);
-- 唯一索引
CREATE UNIQUE INDEX idx_unique_email ON users(email);
删除索引:
sql复制DROP INDEX index_name ON table_name;
4.2 查询分析与优化
使用 EXPLAIN 分析查询:
sql复制EXPLAIN SELECT * FROM users WHERE username LIKE 'j%';
关键指标解读:
- type:从最好到最差依次为 system > const > eq_ref > ref > range > index > ALL
- possible_keys:可能使用的索引
- key:实际使用的索引
- rows:预估需要检查的行数
- Extra:额外信息(如 Using filesort、Using temporary 表示需要优化)
强制使用索引:
sql复制SELECT * FROM users FORCE INDEX (idx_username) WHERE username LIKE 'j%';
5. 用户与权限管理命令
5.1 用户账户管理
创建用户:
sql复制CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
修改密码:
sql复制ALTER USER 'username'@'hostname' IDENTIFIED BY 'newpassword';
删除用户:
sql复制DROP USER 'username'@'hostname';
5.2 权限管理
授予权限:
sql复制-- 基本权限
GRANT SELECT, INSERT ON database.* TO 'user'@'localhost';
-- 所有权限
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost' WITH GRANT OPTION;
查看权限:
sql复制SHOW GRANTS FOR 'user'@'localhost';
撤销权限:
sql复制REVOKE INSERT ON database.* FROM 'user'@'localhost';
刷新权限:
sql复制FLUSH PRIVILEGES;
6. 备份与恢复命令
6.1 使用 mysqldump
备份单个数据库:
bash复制mysqldump -u username -p database_name > backup.sql
备份所有数据库:
bash复制mysqldump -u username -p --all-databases > all_backup.sql
仅备份结构:
bash复制mysqldump -u username -p --no-data database_name > structure.sql
6.2 恢复数据
从备份文件恢复:
bash复制mysql -u username -p database_name < backup.sql
或者进入 MySQL 后执行:
sql复制SOURCE /path/to/backup.sql;
7. 事务与锁命令
7.1 事务控制
开始事务:
sql复制START TRANSACTION;
-- 或
BEGIN;
提交事务:
sql复制COMMIT;
回滚事务:
sql复制ROLLBACK;
设置事务隔离级别:
sql复制SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
7.2 锁相关命令
查看当前锁:
sql复制SHOW OPEN TABLES WHERE In_use > 0;
查看锁等待:
sql复制SHOW ENGINE INNODB STATUS;
手动加锁:
sql复制-- 读锁
LOCK TABLES table_name READ;
-- 写锁
LOCK TABLES table_name WRITE;
-- 解锁
UNLOCK TABLES;
8. 系统变量与状态监控
8.1 系统变量配置
查看所有变量:
sql复制SHOW VARIABLES;
查看特定变量:
sql复制SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
设置变量(会话级):
sql复制SET SESSION sort_buffer_size = 1000000;
设置变量(全局级):
sql复制SET GLOBAL max_connections = 200;
8.2 状态监控
查看进程列表:
sql复制SHOW PROCESSLIST;
查看引擎状态:
sql复制SHOW ENGINE INNODB STATUS;
查看表状态:
sql复制SHOW TABLE STATUS LIKE 'users';
9. 存储过程与触发器
9.1 存储过程
创建存储过程:
sql复制DELIMITER //
CREATE PROCEDURE get_user_count(OUT user_count INT)
BEGIN
SELECT COUNT(*) INTO user_count FROM users;
END //
DELIMITER ;
调用存储过程:
sql复制CALL get_user_count(@count);
SELECT @count;
9.2 触发器
创建触发器:
sql复制DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
IF NEW.username IS NULL THEN
SET NEW.username = NEW.email;
END IF;
END //
DELIMITER ;
查看触发器:
sql复制SHOW TRIGGERS;
10. 实用技巧与常见问题
10.1 批量操作优化
使用 LOAD DATA 快速导入:
sql复制LOAD DATA INFILE '/path/to/file.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
批量更新技巧:
sql复制UPDATE products
SET price = CASE
WHEN id = 1 THEN 10.99
WHEN id = 2 THEN 15.99
ELSE price
END
WHERE id IN (1, 2);
10.2 常见问题解决
重置自增ID:
sql复制ALTER TABLE users AUTO_INCREMENT = 1;
修复表:
sql复制REPAIR TABLE table_name;
优化表:
sql复制OPTIMIZE TABLE table_name;
查看数据库大小:
sql复制SELECT
table_schema AS "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.TABLES
GROUP BY table_schema;
在实际工作中,我发现许多开发者只记住了基本的 CRUD 操作,而忽略了 MySQL 提供的丰富命令集。掌握这些命令不仅能提高工作效率,还能在关键时刻快速解决问题。比如使用 SHOW PROCESSLIST 找出阻塞的查询,或者用 EXPLAIN 分析慢查询的原因。建议定期复习这些命令,特别是那些不常用的管理命令,它们往往能在关键时刻派上大用场。
